React Router v6升级后路由访问显示空白页问题咨询
问题根因
升级后页面空白无控制台报错,核心是react-router-dom v6 相对 v5 存在Route组件的破坏性API变更,现有代码未适配新规则:
- v5 版本中
Route的component/render/children属性支持直接传入组件函数引用,但v6版本仅保留element属性,要求必须传入可渲染的JSX元素,而非组件本身的引用。当前代码写的element={TierA}属于直接传递组件函数,React无法识别渲染,因此所有路由都不会输出内容,且不会抛出显性报错。 - 额外冗余问题:v6 版本路由默认采用精确匹配规则,不再支持也不需要
exact属性,代码中添加的exact属于无效冗余代码。另外index.js中导入的BrowserRouter/Routes/Route没有实际使用,属于无用导入。
修复方案
- 修改所有路由的
element属性传值,将组件引用改为JSX标签形式 - 删除所有
Route标签上冗余的exact属性 - (可选优化)清理
index.js中未使用的react-router-dom相关导入,精简代码
修复后路由核心代码如下:
<BrowserRouter basename={process.env.PUBLIC_URL}> <Routes> <Route element={<TierA />} path="/a_tier" /> <Route element={<TierB />} path="/b_tier" /> <Route element={<Catalogue />} path="/catalogue" /> <Route element={<Admin />} path="/admin" /> <Route element={<NotFound />} path="*" /> </Routes> </BrowserRouter>
修改完成后重启npm start开发服务,访问对应路由即可正常渲染,根路径/会自动匹配兜底的*路由展示404页面,和v5版本行为一致。
内容的提问来源于stack exchange,提问作者Ridhwaan Shakeel
相关产品推荐
相关产品推荐

