React:<Route精确路径=“ /” />和<Route path =“ /” />之间的区别


161

有人可以解释一下

<Route exact path="/" component={Home} />

<Route path="/" component={Home} />

我不知道“确切”的意思


1
答案都很棒。但是,可能会有一个疑问,例如“为什么我们不能为所有路线都精确设置<code>?”。想象一下这样的URL。<code> yourreactwebsite.com/getUsers/userId=吗?</ code>这是一个示例,其中用户ID将动态地输入到URL中,因此我们不能在此处使用Router中的<code> exact </ code>属性。
VIJAYKUMAR REDDY ALAVALA

Answers:


263

在这个例子中,什么都没有。exact当您具有多个具有相似名称的路径时,该参数将起作用:

例如,假设我们有一个Users显示用户列表的组件。我们还有一个CreateUser用于创建用户的组件。的网址CreateUsers应嵌套在下Users。因此,我们的设置可能如下所示:

<Switch>
  <Route path="/users" component={Users} />
  <Route path="/users/create" component={CreateUser} />
</Switch>

现在,这里的问题是,当我们转到http://app.com/users路由器时,将通过所有定义的路由,并返回它找到的第一个匹配项。因此,在这种情况下,它将首先找到Users路线,然后返回。都好。

但是,如果我们转到http://app.com/users/create,它将再次遍历所有定义的路线并返回找到的FIRST匹配项。React路由器会进行部分匹配,因此会/users部分匹配/users/create,因此它将再次错误地返回Users路由!

exactPARAM禁用部分匹配的路由,并确保如果路径是精确匹配当前URL,它只是返回的路线。

所以在这种情况下,我们应该添加exact到我们的Users路由,这样只会匹配/users

<Switch>
  <Route exact path="/users" component={Users} />
  <Route path="/users/create" component={CreateUser} />
</Switch>

该文档exact详细解释并给出了其他示例。


11
“但是,如果我们转到app.com/users/create,它将再次遍历所有已定义的路由并返回找到的FIRST匹配项。” -实际上,它将返回找到匹配项的所有路径(全部或部分)。@Chase DeAnda描述的行为仅在<Route>包含在<Switch>标记中时才会发生。
watsabitz

4
exact我认为应该是默认设置
Alexander Derck '19

如果每个路由定义都在不同的组件中(我/admin//users在管理组件中以及/admin/users/create在根组件中),该怎么办?我目前exact遇到这种情况,典型的解决方案无法正常工作。
Yulio Aleman Jimenez

我认为仅当两条路由都在其Switch父级(或组件)的同一级别中时,此行为才有效
Yulio Aleman Jimenez 19/09/27

1
@ChaseDeAnda我需要的恰恰相反。也许我应该在SO上写一个新的答案以阐明我的情况并获得正确的答案。
Yulio Aleman Jimenez

7

简而言之,如果您为应用程序的路由定义了多个路由,则用这样的Switch组件封装;

<Switch>

  <Route exact path="/" component={Home} />
  <Route path="/detail" component={Detail} />

  <Route exact path="/functions" component={Functions} />
  <Route path="/functions/:functionName" component={FunctionDetails} />

</Switch>

然后,您必须将exact关键字放入该路径的关键字,该路径的路径也包含在另一个路径的路径中。例如/,所有路径中都包含home路径,因此它需要具有exact关键字以将其与以开头的其他路径区分开/。原因也类似于/functions路径。如果要使用其他路径,例如/functions-detail/functions/open-door其中包含/functions该路径,则需要使用exact/functions路径。



-1

最短的答案是

请尝试这个。

<switch>
   <Route exact path="/" component={Home} />
   <Route path="/about" component={About} />
   <Route path="/shop" component={Shop} />
 </switch>

1
基本上,这并不能解释exact属性/ prop 的含义,因此肯定不是“答案”。您应该尝试解决实际提出的问题,而不是为不确定OP实际存在的问题提供解决方案。
Victor Zamanian
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.