Chaque fois que vous essayez d'afficher un Link
sur une page, c'est à l'extérieur de l' BrowserRouter
, vous obtiendrez cette erreur.
Ce message d'erreur est essentiellement dire que tout élément qui n'est pas un enfant de notre - <Router>
ne peut pas contenir de Réagir Routeur composants connexes.
Vous devez migrer votre hiérarchie des composants de comment vous le voyez dans la première réponse ci-dessus. Pour quelqu'un d'autre l'examen de ce post, qui peuvent avoir besoin de regarder plus d'exemples.
Disons que vous avez un Header.js
composant qui ressemble à ceci:
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;
Et votre App.js
le fichier ressemble à ceci:
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;
Notez que l' Header.js
de la composante est prise de l'utilisation de l' Link
balise à partir de la react-router-dom
mais le componet a été placé à l'extérieur de l' <BrowserRouter>
, cela conduira à la même erreur que celle de l'expérience par les OP. Dans ce cas, vous pouvez faire la correction dans un seul mouvement:
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;
Veuillez lire attentivement et vous assurer que vous avez l' <Header />
ou quel que soit votre volet peut être à l'intérieur, non seulement de l' <BrowserRouter>
mais aussi à l'intérieur de l' <div>
, sinon vous aurez aussi l'erreur qu'un Routeur ne peut avoir qu'un enfant et qui se réfère à l' <div>
qui est l'enfant de l' <BrowserRouter>
. Tout le reste comme Route
et les composants doivent aller à l'intérieur de lui dans la hiérarchie.
Alors maintenant, l' <Header />
est un enfant de l' <BrowserRouter>
dans la <div>
balises et il peut faire usage de l' Link
élément.