在使用React Router 4.3时,嵌套路由失效是一个常见问题。本文将通过一个案例分析,讲解如何解决在父路由下子路由无法正确匹配的问题。
假设一个/course/coursedetails
详情页包含一个菜单,用于切换不同的tab内容(例如/course/coursedetails/coursecatalog
)。访问/course/coursedetails
正常,但点击菜单跳转到/course/coursedetails/coursecatalog
时,却返回404错误。即使移除exact
属性,父组件也没有响应路由变化。
问题在于父路由的Route
组件使用了exact
属性。exact
属性强制精确匹配路径,导致父路由匹配成功后,阻止了对子路由的匹配。
解决方法:移除父路由Route
组件的exact
属性。
例如,假设app.js
中父路由代码如下(代码详见原图):
// app.js (修改后的代码)
将exact
属性移除后,父路由将不再进行精确匹配,允许子路由匹配成功。 修改后的app.js
中的父路由代码应类似于:
修改后,访问/course/coursedetails/coursecatalog
即可正确显示子路由内容。
在使用React Router进行嵌套路由时,正确理解和使用exact
属性至关重要。 exact
属性适用于需要精确匹配路径的场景,但在嵌套路由中,通常需要将其移除,以确保子路由能够被正确匹配。 希望本文能帮助您避免类似问题,更好地运用React Router。