React 路由文件中路由之间有顺序吗?

在学习并编写公司项目时,出现了一个问题。

clipboard.png
这是路由文件
clipboard.png
左边是侧边栏,是一个公共组件,右侧是“设备资产”的组件
资产名称是<Button><Link to="..." target="_blank">资产名称</Link></Button>
本应该点击跳转之后显示这个页面
clipboard.png
但虽然路径改变了,页面却只有一个侧边栏,右侧是空白,打开工具查看发现组件也都是之前的,没有正确显示跳转之后的页面。
clipboard.png
后来我发现我的“详情”路由写在了“/”目录后面,我将它移到了前面,发现可以正常跳转了
请问这是怎么回事?

阅读 4.3k
1 个回答

如果你的 exact 设置为false,表示的是 非严格匹配;举个例子:

如果你的请求的路由是: '/a/b/c';那么他会被匹配到以下路由

  1. /
  2. /a
  3. /a/b
  4. /a/b/c

这里的 第4个路由是你的目标路由, 如果前3个路由的 exact都是 设置为 false; 并且路由的顺序是在 4的前面。那么前面3个的组件都会被渲染,并且默认的,会把 2 当作 1的子页面,3当作 2的子页面,

这样设计的目的,是为了实现路由的嵌套业务。所以你如果不希望这样,要么设置 exact=true ;要么注意顺序。

这种场景在模糊匹配的路由中也是存在的。

所以定义路由的时候,一般都是这样,

  1. 长路由放在短路由前面,这里是说,路由前半部分相同的情况 /a/b 应该放在 /a 前面
  2. 长路由放在模糊匹配的前面 /a/b 放在 /a/:id