React用Route包裹组件时站点不加载,仅BrowserRouter包裹可正常运行
问题原因
页面加载失败的核心原因是react-router-dom v6版本语法和旧v5版本不兼容:你写的是v5时代的路由写法,但项目默认安装的是最新v6版本,几个不兼容的点直接导致路由解析失败白屏:
- v6强制要求所有
Route组件必须嵌套在Routes组件内部,不能直接作为BrowserRouter的子元素,缺少Routes包裹时路由规则完全不会生效。 - v6废弃了把页面组件放在
Route标签子节点的写法,需要渲染的页面必须通过Route的element属性传入。 - 你写的第一个
Route没有声明合法的匹配规则:v6里作为根路径默认展示的首页路由,要么明确写path="/",要么加index属性标记为索引路由,否则规则无效。另外你代码里残留的`enter code here`无效字符串也会引发渲染报错。
修复方案
直接替换App.js内容为以下v6标准写法即可:
import React from 'react'; import './App.css'; // 新增导入v6必须的Routes组件 import { BrowserRouter, Routes, Route } from "react-router-dom" import Home from './Pages/Home'; import SignUpPage from './Pages/SignUpPage'; function App() { return ( <div className="App"> <BrowserRouter> <Routes> {/* index标记代表父路径下默认匹配的首页,组件通过element传入 */} <Route index element={<Home />} /> <Route path='/signup' element={<SignUpPage />} /> </Routes> </BrowserRouter> </div > ); } export default App;
如果你确实要使用v5版本的旧写法,需要先把项目里的react-router-dom版本降到v5,不过更推荐使用上面的v6标准写法,v5已经停止官方维护。
内容的提问来源于stack exchange,提问作者Akshay Padmanabhan
相关产品推荐
相关产品推荐

