使用React-Router时出现的错误及解决

问题描述

在配置路由时出现的问题,关于 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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

来源链接:https://www.jb51.net/javascript/317679z2p.htm

© 版权声明
THE END
支持一下吧
点赞12 分享
1f60af9e8c1bef7e的头像-牛翰网
评论 抢沙发
头像
请文明发言!
提交
头像

昵称

取消
昵称表情代码快捷回复

    暂无评论内容