Reactjs 反应路由器交换机和精确路径
我已经阅读了这份文件 我理解交换机和路由的定义 但还是不能理解一些要点 如果我只想选择一条路径进行渲染,我们可以使用如下开关Reactjs 反应路由器交换机和精确路径,reactjs,react-router,react-router-v4,Reactjs,React Router,React Router V4,我已经阅读了这份文件 我理解交换机和路由的定义 但还是不能理解一些要点 如果我只想选择一条路径进行渲染,我们可以使用如下开关 <Switch> <Route exact path="/" component={Home} /> <Route path="/a" component={A} /> <Route path="/b" component={B} /> </Switch> <Switch> <
<Switch>
<Route exact path="/" component={Home} />
<Route path="/a" component={A} />
<Route path="/b" component={B} />
</Switch>
<Switch>
<Route exact path="/" component={Home} />
<Route path="/a" component={A} />
<Route path="/b" component={B} />
<Route component={SpecificComponent} />
</Switch>
我不明白的一点是,我可以在没有开关的情况下获得同样的效果
<Route exact path="/" component={Home} />
<Route path="/a" component={A} />
<Route path="/b" component={B} />
那么我们为什么要使用交换机呢?我们什么时候需要使用交换机
我发现一个需要使用开关的情况 如果我想在没有路径匹配的情况下渲染特定组件 我们需要像这样把路线包在交换机里
<Switch>
<Route exact path="/" component={Home} />
<Route path="/a" component={A} />
<Route path="/b" component={B} />
</Switch>
<Switch>
<Route exact path="/" component={Home} />
<Route path="/a" component={A} />
<Route path="/b" component={B} />
<Route component={SpecificComponent} />
</Switch>
我说的对吗?虽然在你的情况下,你可以使用exact获得相同的效果,但情况可能并不总是如此。但是,如果其中一条管线包含嵌套管线,则如果顶层有确切的管线,则不能使用嵌套管线
开关
在上述情况下可用于此目的,因为它仅呈现第一个匹配
比如说,
假设主路线包含嵌套路线,如
const Home = (props) => (
<div>
<Route path="/dashboard" component={Dashboard}/>
<Route path="/layout" component={Layout}/>
</div>
)
基本上,“精确”和“精确”关键字都有相同的用途。(注意:匹配算法使用检查来查看当前URL是否以该路径开始。)但在我们使用时,路由声明或特定性的顺序很重要。需要在顶部添加更具体的路线。就你而言
<Switch>
<Route path="/a" component={A} />
<Route path="/b" component={B} />
<Route exact path="/" component={Home} />
</Switch>
在“精确”的情况下,当您通过“精确”时,仅当路径完全匹配时,此路由才会匹配。在您的情况下,主路径设置为“精确”
<Route exact path="/" component={Home} />
<Route path="/a" component={A} />
<Route path="/b" component={B} />
让我介绍一下
路线
、精确
和开关
的显著特点:
进行部分匹配。路由的路径包含匹配(匹配多个)Route
删除部分匹配。它可能匹配多个路由,以防我们在路由中使用通配符exact
仅呈现第一个匹配的路由<代码>开关路径以独占方式匹配(仅匹配一个)开关
exact
时是如何工作的。假设我们有下面的代码,并且没有使用exact
因此,如果我们访问/pagetwo
URL,Route
将进行部分匹配,并呈现两条路由。让我们看看它是怎么发生的。在下图中,我们查看地址栏和导航到的路径(提取路径)以及匹配的路径。因此,Route
将在extractedPath.contains(路由声明中的路径)
计算为true时呈现路由
希望这能澄清路线
在幕后是如何运作的。为了避免这种部分匹配,我们使用exact
。使用exact
可以解决问题,直到遇到一些特殊情况。假设我们有两条路线,如:
/users/create
(路由中的通配符)/users/*
在上述情况下,
exact
将匹配两条路线。因此,要解决这些问题,我们可以使用开关
。它只渲染一条路线,并且首先匹配的路线。因此,在这里,定义路线的顺序很重要。谢谢您的回答。但我仍然不能理解你们的例子,所以如果我们想让这个例子正常工作,我们需要在Switch中包装Route?我发现了一种需要使用Switch的情况。我更新了我的问题,对吗?@是的,这是另一种情况,当您想在不匹配的情况下呈现默认路由时,您可以使用switch。我的答案指定了一种情况,您需要编写嵌套路由谢谢!。我想知道如何让你的例子正确运行,你能解释一下吗?