Wenn Sie versuchen, Link
eine Seite außerhalb der Seite anzuzeigen BrowserRouter
, wird dieser Fehler angezeigt .
Diese Fehlermeldung besagt im Wesentlichen, dass Komponenten, die nicht <Router>
untergeordnet sind, keine React Router-bezogenen Komponenten enthalten dürfen.
Sie müssen Ihre Komponentenhierarchie so migrieren, wie Sie es in der ersten Antwort oben sehen. Für alle anderen, die diesen Beitrag lesen und sich möglicherweise weitere Beispiele ansehen müssen.
Angenommen, Sie haben eine Header.js
Komponente, die folgendermaßen aussieht:
import React from 'react';
import { Link } from 'react-router-dom';
const Header = () => {
return (
<div className="ui secondary pointing menu">
<Link to="/" className="item">
Streamy
</Link>
<div className="right menu">
<Link to="/" className="item">
All Streams
</Link>
</div>
</div>
);
};
export default Header;
Und Ihre App.js
Datei sieht so aus:
import React from 'react';
import { BrowserRouter, Route, Link } from 'react-router-dom';
import StreamCreate from './streams/StreamCreate';
import StreamEdit from './streams/StreamEdit';
import StreamDelete from './streams/StreamDelete';
import StreamList from './streams/StreamList';
import StreamShow from './streams/StreamShow';
import Header from './Header';
const App = () => {
return (
<div className="ui container">
<Header />
<BrowserRouter>
<div>
<Route path="/" exact component={StreamList} />
<Route path="/streams/new" exact component={StreamCreate} />
<Route path="/streams/edit" exact component={StreamEdit} />
<Route path="/streams/delete" exact component={StreamDelete} />
<Route path="/streams/show" exact component={StreamShow} />
</div>
</BrowserRouter>
</div>
);
};
export default App;
Beachten Sie, dass die Header.js
Komponente das Link
Tag von verwendet react-router-dom
, die Komponente jedoch außerhalb von platziert <BrowserRouter>
wurde. Dies führt zu demselben Fehler wie die einzige Erfahrung des OP. In diesem Fall können Sie die Korrektur in einem Zug vornehmen:
import React from 'react';
import { BrowserRouter, Route } from 'react-router-dom';
import StreamCreate from './streams/StreamCreate';
import StreamEdit from './streams/StreamEdit';
import StreamDelete from './streams/StreamDelete';
import StreamList from './streams/StreamList';
import StreamShow from './streams/StreamShow';
import Header from './Header';
const App = () => {
return (
<div className="ui container">
<BrowserRouter>
<div>
<Header />
<Route path="/" exact component={StreamList} />
<Route path="/streams/new" exact component={StreamCreate} />
<Route path="/streams/edit" exact component={StreamEdit} />
<Route path="/streams/delete" exact component={StreamDelete} />
<Route path="/streams/show" exact component={StreamShow} />
</div>
</BrowserRouter>
</div>
);
};
export default App;
Bitte überprüfen Sie sorgfältig und stellen Sie sicher, dass Sie die <Header />
oder was auch immer Ihre Komponente nicht nur <BrowserRouter>
innerhalb <div>
, sondern auch innerhalb der hat. Andernfalls erhalten Sie auch die Fehlermeldung, dass ein Router möglicherweise nur ein Kind hat, das sich auf das Kind bezieht, von dem <div>
das Kind ist <BrowserRouter>
. Alles andere wie Route
und Komponenten müssen in der Hierarchie enthalten sein.
Das ist nun <Header />
ein untergeordnetes Element <BrowserRouter>
innerhalb der <div>
Tags und kann das Link
Element erfolgreich verwenden .
react-router
, da Sie unterschiedliche Ansätze für das Index-Routing verwenden.