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

React运行报Can not read properties of null (reading '0')错误求解决

问题原因
  • 核心原因是你使用的react-router-dom v6版本已经正式移除了withRouter高阶组件,你用withRouter包裹App组件后,props上并没有注入history对象,调用props.history.replace自然会抛出不存在的错误。
  • 这个报错和异步时序无关,所以你尝试的setTimeout方案不会生效,也不需要用callback来解决。
解决方案

方案1:自定义兼容类组件的withRouter高阶组件

如果不想修改现有类组件结构,可以自己实现一个适配v6版本的withRouter,替换从react-router-dom导入的同名方法即可:

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

function withRouter(Component) {
  function ComponentWithRouterProp(props) {
    const navigate = useNavigate();
    return (
      <Component
        {...props}
        // 注入和v5版本用法一致的history.replace方法
        history={{ replace: (path) => navigate(path, { replace: true }) }}
      />
    );
  }
  return ComponentWithRouterProp;
}

方案2:将类组件改写为函数组件(更推荐)

v6版本的react-router-dom原生提供钩子给函数组件使用,代码更简洁:

import React from 'react';
import { Link, useNavigate, BrowserRouter } from 'react-router-dom';
import Auth from './auth/auth';
import { Security } from '@okta/okta-react';
import { oktaAuth, toRelativeUrl } from '../../../../libs/okta-auth.js';
import Routes from './routes/routes';

function App() {
  const navigate = useNavigate();
  const restoreOriginalUri = async (_oktaAuth, originalUri) => {
    navigate(toRelativeUrl(originalUri, window.location.origin), { replace: true });
  };

  return (
    <h1>
      Welcome to clinical-trials!!!
      <br />
      <hr />
      <br />
      <div role='navigation'>
        <ul>
          <li>
            <Link to='/'>Home</Link>
          </li>
        </ul>
      </div>
      <div>
        <Security
          oktaAuth={oktaAuth}
          restoreOriginalUri={restoreOriginalUri}
        >
          <Auth />
          <Routes />
        </Security>
      </div>
    </h1>
  );
}

// 外层直接套BrowserRouter即可,不需要额外的高阶组件包裹
export default function WrappedApp() {
  return (
    <BrowserRouter>
      <App />
    </BrowserRouter>
  )
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:39:03