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

迁移至React Router v6时RouteComponentProps导出错误的解决方法

解决React Router v6迁移中RouteComponentProps不存在的问题

问题根源

React Router v6已完全移除了RouteComponentProps类型/接口,同时你当前的withRouter实现将路由相关属性嵌套在router对象中,导致类组件无法直接通过this.props.location访问到目标属性。

修复步骤

1. 调整withRouter实现

修改包装器,将路由属性直接传递给组件的顶层props(对齐v5的withRouter行为):

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

function withRouter(Component) {
  function ComponentWithRouterProp(props) {
    const location = useLocation();
    const navigate = useNavigate();
    const params = useParams();
    // 直接把路由属性挂载到props顶层,而非嵌套在router对象
    return <Component {...props} location={location} navigate={navigate} params={params} />;
  }

  return ComponentWithRouterProp;
}

export default withRouter;

2. 修改类组件代码

移除RouteComponentProps的导入和依赖,调整props类型(TypeScript场景)或直接去掉类型标注(JavaScript场景):

TypeScript版本
import { Route, Routes } from "react-router-dom";
import React from "react";

// 自定义路由props类型,替代已移除的RouteComponentProps
interface RouterProps {
  location: ReturnType<typeof useLocation>;
  navigate: ReturnType<typeof useNavigate>;
  params: ReturnType<typeof useParams>;
}

class App extends React.Component<RouterProps, IState> {
  constructor(props: RouterProps) {
    super(props);
    this.state = {
      prop1: null
    };
  }
   
  componentDidMount() {
    if (this.props.location.pathname === "/test") {
      window.location.reload();
    }
  };

  render() {
    return (
      <Routes>
        <Route path="/test" element={<Test />} />
      </Routes>
    )
  }
}
 
export default withRouter(App);
JavaScript版本
import { Route, Routes } from "react-router-dom";
import React from "react";

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      prop1: null
    };
  }
   
  componentDidMount() {
    if (this.props.location.pathname === "/test") {
      window.location.reload();
    }
  };

  render() {
    return (
      <Routes>
        <Route path="/test" element={<Test />} />
      </Routes>
    )
  }
}
 
export default withRouter(App);

核心说明

  • v6不再提供RouteComponentProps,需自行定义所需的路由属性类型
  • 调整withRouter的属性传递方式,确保类组件能直接访问location、navigate等属性,无需嵌套读取

内容的提问来源于stack exchange,提问作者lrr59

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:46:13