React 解决 react-router-dom ^6.0.2 报错: A <Route> is only ever to be used as the child of <Routes>

这篇博客介绍了React Router v6的变化,主要在于Route组件的使用方式。在新版本中,Route需被Routes包裹,且element属性替代了component。为保持与旧版本兼容,可以选择降低react-router-dom版本。详细展示了新旧两种版本的路由配置代码,帮助开发者顺利迁移项目。
摘要由CSDN通过智能技术生成

npm add react-router-dom并引入模块后编写路由,却报错: A <Route> is only ever to be used as the child of <Routes>。这是因为react-router-dom 6.0.2 高版本的router写法改变。如果想要遵从以前的写法,也可以修改版本依赖为低版本如^4.2.2。如果想适应新版本的写法,解决方法如下。

无论高低版本,src 下 index.js中引入BrowserRouter并包裹App:

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { BrowserRouter } from 'react-router-dom';

ReactDOM.render(
  <React.StrictMode>
    <BrowserRouter>
      <App />
    </BrowserRouter>
  </React.StrictMode>,
  document.getElementById('root')
);

旧的低版本路由写法——子引入Link和Route,Route外不需要Routes包裹:

import React from 'react';
import { Link, Route } from 'react-router-dom'
import Home from './component/Home'
import About from './component/About'
export default class App extends React.Component {
  render() {
    return (
      <div>
        <div className="list-group">
          {/* 编写路由链接 导航区的a标签改为Link标签*/}
          <Link className="list-group-item" to="/about">显示About</Link>
          <br />
          <Link className="list-group-item" to="/home">显示Home</Link>
        </div>
        <div className="panel">
          <div className="panel-body">
            {/* 注册路由 展示区写Route标签进行路由的匹配*/}
              <Route path="/about"component={About} />
              <Route path="/home"component={Home} />
          </div>
        </div>
      </div>
    )
  }
}

新的高版本路由写法——除了Link和Route还要引入Routes,包裹在Route外。注意element处的写法与之前component不同:

import React from 'react';
import { Link, Routes, Route } from 'react-router-dom'
import Home from './component/Home'
import About from './component/About'
export default class App extends React.Component {
  render() {
    return (
      <div>
        {/* 编写路由链接 */}
        <div className="list-group">
          <Link className="list-group-item" to="/about">显示About</Link>
          <br />
          <Link className="list-group-item" to="/home">显示Home</Link>
        </div>
        <div className="panel">
          <div className="panel-body">
            {/* 注册路由 */}
            <Routes>
              <Route path="/about" element={<About />} />
              <Route path="/home" element={<Home />} />
            </Routes>
          </div>
        </div>
      </div>
    )
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值