带有 React 16.6 Suspense 的 React Router “提供给 `Route` 的类型为 `object` 的无效props `component`,预期为 `function`。”

IT技术 reactjs react-router react-router-v4 dynamic-import react-16
2021-05-20 05:53:53

我正在使用 React 的最新版本 (16.6) 和react-router(4.3.1) 并尝试使用React.Suspense.

尽管我的路由工作正常并且代码确实分成了几个动态加载的包,但我收到了一个警告,关于不是返回一个函数,而是一个对象到Route. 我的代码:

import React, { lazy, Suspense } from 'react';
import { Switch, Route, withRouter } from 'react-router-dom';

import Loading from 'common/Loading';

const Prime = lazy(() => import('modules/Prime'));
const Demo = lazy(() => import('modules/Demo'));

const App = () => (
  <Suspense fallback={<Loading>Loading...</Loading>}>
    <Switch>
      <Route path="/" component={Prime} exact />
      <Route path="/demo" component={Demo} />
    </Switch>
  </Suspense>
);

export default withRouter(App);

控制台警告如下: Warning: Failed prop type: Invalid prop `component` of type `object` supplied to `Route`, expected `function`.

正常导入会返回一个函数,但动态导入lazy()会返回一个对象。

对此有任何修复吗?

3个回答

尝试使用renderprop 而不是component

<Route path="/" render={()=> <Prime />} exact />
<Route path="/demo" render={()=> <Demo />} />

这将在react-router-dom4.4+ 版本中修复,因为此问题表明

您可以等待最终版本,或者如果您今天不想更改代码,现在可以通过以下方式安装测试版 yarn add react-router-dom@next

我知道这个答案没有回答最初的问题,但由于我遇到过类似的问题,也许我的解决方案会帮助其他人。

我的错误:

Failed prop type: Invalid prop `component` of type `object` supplied to "link", expected function.

与接受的答案一样,这可以通过以下方式解决:

<Link to={'/admin'} title={'Log In'} component={props => <Button {...props} />} />