Bất cứ khi nào bạn cố gắng hiển thị Link
trên một trang bên ngoài, BrowserRouter
bạn sẽ gặp lỗi đó.
Thông báo lỗi này về cơ bản nói rằng bất kỳ thành phần nào không phải là con của chúng tôi <Router>
đều không thể chứa bất kỳ thành phần nào liên quan đến Bộ định tuyến React.
Bạn cần di chuyển phân cấp thành phần của mình theo cách bạn thấy trong câu trả lời đầu tiên ở trên. Đối với bất kỳ ai khác xem xét bài đăng này, người có thể cần xem thêm các ví dụ.
Giả sử bạn có một Header.js
thành phần trông giống như sau:
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;
Và App.js
tệp của bạn trông như thế này:
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;
Lưu ý rằng Header.js
thành phần đang sử dụng Link
thẻ từ react-router-dom
nhưng các thành phần được đặt bên ngoài <BrowserRouter>
, điều này sẽ dẫn đến lỗi giống như một trải nghiệm của OP. Trong trường hợp này, bạn có thể thực hiện điều chỉnh bằng một động tác:
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;
Vui lòng xem lại cẩn thận và đảm bảo bạn có <Header />
hoặc bất cứ thành phần của bạn có thể bên trong không chỉ <BrowserRouter>
mà còn bên trong <div>
, nếu không bạn cũng sẽ nhận được những lỗi mà một Router chỉ có thể có một đứa trẻ được đề cập đến <div>
đó là con của <BrowserRouter>
. Mọi thứ khác chẳng hạn nhưRoute
và các thành phần phải đi trong nó trong hệ thống phân cấp.
Vì vậy, bây giờ <Header />
là con của <BrowserRouter>
các <div>
thẻ bên trong và nó có thể sử dụng thành công Link
phần tử.
react-router
, Vì bạn đang sử dụng các cách tiếp cận khác nhau cho Định tuyến chỉ mục.