使用React-Router时出现的错误及解决
作者:now or never
问题描述
在配置路由时出现的问题,关于 Router5 和 Router6的使用区别
bundle.js:38620 Uncaught Error: A <Route> is only ever to be used as the child of <Routes> element, never rendered directly. Please wrap your <Route> in a <Routes>.
at invariant (bundle.js:38620:20)
at Route (bundle.js:39415:11)
at renderWithHooks (bundle.js:24114:22)
at mountIndeterminateComponent (bundle.js:28690:17)
at beginWork (bundle.js:30148:20)
at HTMLUnknownElement.callCallback (bundle.js:12074:18)
at Object.invokeGuardedCallbackDev (bundle.js:12123:20)
at invokeGuardedCallback (bundle.js:12185:35)
at beginWork$1 (bundle.js:34989:11)
at performUnitOfWork (bundle.js:34163:16)
原因分析
Switch的作用
- 通常情况下,path (路径) 和 coponent (组件) 是一一对应的关系。
- 在默认的路由匹配规则中,如果不使用Switch,注册的所有路由都会和路径进行匹配,并且将匹配到的组件都显示出来。如下代码:如果输入路径为 /home 将会显示 Home 和 Hotel 两个组件。
- Switch可以提高路由的匹配效率,一旦匹配上将不再继续向下匹配。
<Routes> <Route path="/about" element={<About />}/> <Route path="/home" element={<Home />}/> <Route path="/home" element={<Hotel />}/> </Routes>
Router6中的Routes
Router6 中使用了 Routes 代替了 Switch,但是细微的差别是,Router5中不使用Switch是不会报错的。
但是Router6中不使用Routes会报上述错误。
这样修改的原因有待学习??
解决方案
综上,解决方法当然是加上 Routes 呀
import React from "react"; import {BrowserRouter as Router, Routes, Route} from 'react-router-dom' import Login from "./Login"; function Main(){ return ( <Router> <Routes> <Route path='/login' exact element={<Login/>} /> </Routes> </Router> ) } export default Main
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。