React Router v6:在元件外部導覽
React Router v6 引入了處理歷史物件方式的變化。在 v5 中,您可以建立一個共享歷史物件並將其傳遞給 Router,v6 需要不同的方法。
問題:
如何從外部導航React Router v6 中的元件,與 v5 中的行為類似?
解決方案:
要複製先前的行為,您可以建立一個實例化歷史狀態的自訂路由器如RRDv6 路由器中所做的那樣:
<code class="javascript">const CustomRouter = ({ history, ...props }) => { const [state, setState] = useState({ action: history.action, location: history.location }); useLayoutEffect(() => history.listen(setState), [history]); return ( <Router {...props} location={state.location} navigationType={state.action} navigator={history} /> ); };</code>
在您的應用程式中包含此自訂路由器並傳遞您的自訂歷史物件:
<code class="javascript">export default function App() { return ( <CustomRouter history={history}> <div className="App"> <Routes> <Route path="/" element={<Home />} /> <Route path="/profile" element={<Profile />} /> </Routes> </div> </CustomRouter> ); }</code>
更新:
更新:<code class="javascript">import { unstable_HistoryRouter as HistoryRouter } from "react-router-dom"; import { createBrowserHistory } from "history"; const history = createBrowserHistory({ window }); ReactDOM.render( <HistoryRouter history={history}> {/* The rest of your app goes here */} </HistoryRouter>, root );</code>
React Router v6 提供了一個歷史記錄路由器,讓您可以傳遞自訂歷史記錄實例:
RRDv6.4 的註解:<code class="javascript">import { createBrowserRouter } from 'react-router-dom'; const router = createBrowserRouter(...); ... router.navigate(targetPath, options);</code>
以上是如何在 React Router v6 中的元件之外導航?的詳細內容。更多資訊請關注PHP中文網其他相關文章!