每当您尝试Link
在之外的页面上显示时,BrowserRouter
都会出现该错误。
该错误消息实际上是在说,不是我们子级的任何组件<Router>
都不能包含任何与React Router相关的组件。
您需要将组件层次结构迁移到上面第一个答案中看到的样子。对于审查此帖子的其他人,可能需要查看更多示例。
假设您有一个Header.js
看起来像这样的组件:
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;
您的App.js
文件如下所示:
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;
请注意,该Header.js
组件正在使用的Link
标记,react-router-dom
但组件位于的外部<BrowserRouter>
,这将导致与OP相同的错误。在这种情况下,您可以一步一步进行更正:
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;
请仔细检查并确保您<Header />
的组件或组件不仅位于<BrowserRouter>
内,而且还位于内<div>
,否则您将得到一个错误,即路由器可能只有一个子代,<div>
该子代指的是的子代。<BrowserRouter>
。其他所有Route
组件(例如和组件)都必须放在层次结构中。
所以现在<Header />
是的一个孩子<BrowserRouter>
的内<div>
标签,它可以成功地利用的Link
元素。
react-router
,因为您对索引路由使用了不同的方法。