2024-02-15 14:51:50
在React Router 4.3中嵌套子路由不生效的常见原因是父路由配置了exact属性,导致路由匹配过于严格,无法继续向下匹配子路由。以下是具体分析和解决方案:
原因分析exact属性的作用:当父路由配置exact时,React Router会要求路径完全匹配才会渲染对应组件。例如:
<Route exact path="/course/coursedetails" component={CourseDetails} />此时访问/course/coursedetails/coursecatalog会因不完全匹配父路由而直接返回404,不会触发子路由匹配。
嵌套路由的匹配逻辑:React Router的路由匹配是从上到下的。若父路由因exact提前终止匹配,子路由根本不会被检查。
移除父路由的exact属性,允许父路由部分匹配,再由子路由处理剩余路径:
// 修改前(错误示例)<Route exact path="/course/coursedetails" component={CourseDetails} />// 修改后(正确示例)<Route path="/course/coursedetails" component={CourseDetails} />完整配置示例父路由配置(如App.js):
<Route path="/course/coursedetails" component={CourseDetails} />子路由配置(如CourseDetails.js):
import { Route } from 'react-router-dom';import CourseCatalog from './CourseCatalog';const CourseDetails = () => ( <div> <h1>Course Details</h1> {/* 子路由路径无需重复父路由部分 */} <Route path="coursecatalog" component={CourseCatalog} /> </div>);关键点:子路由的path可简写为相对路径(如coursecatalog),React Router会自动拼接父路由路径,形成完整路径/course/coursedetails/coursecatalog。
通过以上调整,嵌套子路由即可正常生效。核心原则是:父路由允许部分匹配,子路由通过相对路径补充完整路径。