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()
を使用した動的インポートではオブジェクトが返されます。
これに対する修正はありますか?
render
の代わりにcomponent
propを使用してみてください
<Route path="/" render={()=> <Prime />} exact /> <Route path="/demo" render={()=> <Demo />} />
これはreact-router-dom
バージョン4.4+で修正されます issue が示唆するように
最終リリースを待つか、今日コードを変更したくない場合は、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} />} />