You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React项目react-router-dom v6匹配/update/:id路由报错解决

错误根因

你使用的是v6版本的react-router-dom,该版本和v5语法存在破坏性变更,你的代码完全沿用了v5的旧写法,直接触发报错:

  • v6版本的<Route>组件移除了render、component属性,仅支持通过element属性传入要渲染的React节点,你给/update/:id配置的render属性不会被识别,路由匹配后找不到可渲染内容,就会出现控制台提示的空页面错误。
  • v6版本默认所有路由都是精确匹配,不再需要手动加exact属性。
  • v6版本不会自动给类组件注入match、location、history这类路由props,直接在类组件里访问this.props.match会拿到undefined,自然读不到路由参数。
  • 额外问题:导航栏里的Update跳转链接写的是to="/update",路径没有带动态id段,点击后无法匹配/update/:id规则,也会导致空白。
修复方案

1. 给类组件封装路由注入HOC

v6没有提供v5里的withRouter高阶组件,需要自己基于路由hooks封装一层,把路由参数注入到类组件的props里。你可以把下面的代码加到RestaurantUpdate.js顶部:

import { useParams, useNavigate, useLocation } from 'react-router-dom';

const withRouter = (WrappedComponent) => {
  return (props) => {
    const params = useParams();
    const navigate = useNavigate();
    const location = useLocation();
    return (
      <WrappedComponent
        {...props}
        match={{ params }}
        navigate={navigate}
        location={location}
      />
    );
  };
};

然后修改RestaurantUpdate.js的导出语句,用HOC包裹组件:

export default withRouter(RestaurantUpdate);

改完后组件里原有的this.props.match.params.id写法就可以正常拿到路由参数了。

2. 修改App.js里的路由配置

把原来/update/:id的render写法替换成v6要求的element写法,同时删掉首页路由多余的exact属性:

<Routes>
  <Route path="/list" element={<RestaurantList />} />
  <Route path="/create" element={<RestaurantCreate />} />
  <Route path="/search" element={<RestaurantSearch />} />
  {/* 替换原来的render写法 */}
  <Route path="/update/:id" element={<RestaurantUpdate />} />
  <Route path="/details" element={<RestaurantDetail />} />
  {/* 删掉多余的exact */}
  <Route path="/" element={<Home />} />
</Routes>

3. 修正导航栏的Update跳转链接

把导航栏里指向Update的Link地址补上动态id参数,比如要跳转到id为1的编辑页就改成:

<Nav.Link href="#link">
  <Link to="/update/1" style={{ color: 'yellow', textDecoration: 'inherit' }}>Update</Link>
</Nav.Link>

实际业务里可以根据需求动态拼接要编辑的餐厅id即可。

改完后重启项目访问/update/1,页面会正常渲染Update标题,控制台也能正确打印出参数id的值1。


内容的提问来源于stack exchange,提问作者Anish Kumar Mohanty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 04:15:55