1. ホーム
  2. reactjs

不変量に失敗しました。<Route> を <Router> の外部で使用することはできません。

2023-12-22 19:37:06

質問

私は react-router-dom でのルーティングのために React アプリケーションのルーティングに使用されます。私のアプリケーションの一部は、別のパッケージで展開されます。依存関係の一覧はこんな感じです。

./app/dashboard/package.json

{
  "dependencies": {
    "@app/components": "^1.0.0",
    "react": "^16.8.5",
    "react-dom": "^16.8.5",
    "react-router-dom": "^5.0.0"
  }
}

./app/components/package.json

{
  "peerDependencies": {
    "react-router-dom": "^5.0.0"
  }
}

のコンポーネントを使用する場合 @app/components のコンポーネントを必要とする react-router-dom このようなエラーが発生します。

Uncaught Error: Invariant failed: You should not use <Route> outside a <Router> 
The above error occurred in the <Context.Consumer> component:
Uncaught (in promise) Error: Invariant failed: You should not use <Route> outside a <Router>

なぜこのようなエラーが発生するのでしょうか?この場合 App.js を使っています。 BrowserRouter

import React, { Suspense } from 'react';
import { Switch, Route } from 'react-router-dom';
import { Placeholder } from '@app/components';

const Auth = React.lazy(() => import(/* webpackPrefetch: true */ './pages/Auth'));
const Index = React.lazy(() => import(/* webpackPrefetch: true */ './pages/Index'));

const App = () => (
  <Suspense fallback={<Placeholder />}>
    <Switch>
      <Route path="/auth" component={Auth} />
      <Route path="/" component={Index} />
    </Switch>
  </Suspense>
);

export default App;

client.jsx

import React from 'react';
import { render } from 'react-dom';
import { BrowserRouter } from 'react-router-dom';

import App from './App';

render(
  <BrowserRouter>
    <App />
  </BrowserRouter>,
  document.getElementById('root'),
);

どのように解決するのですか?

Reactの2インスタンスでのトラブル