要使用React路由器中的useHistory
在路由之間進行程序化導航,您首先需要從react-router-dom
庫中導入鉤子,然後在組件中使用它。這是有關如何使用useHistory
進行導航的分步指南:
導入useHistory
:從組件文件開始時從react-router-dom
軟件包中導入useHistory
開始。
<code class="javascript">import { useHistory } from 'react-router-dom';</code>
初始化useHistory
:在您的功能組件內,調用useHistory
History獲取歷史記錄對象。
<code class="javascript">const history = useHistory();</code>
使用push
方法導航:使用歷史記錄對象的push
方法導航到新路由。例如,要導航到/about
頁面,您將要這樣做:
<code class="javascript">history.push('/about');</code>
用replace
方法替換當前條目:如果要導航到新路由,但要替換歷史記錄堆棧中的當前條目(因此,後面的按鈕不會返回到上一頁),請改用replace
方法:
<code class="javascript">history.replace('/about');</code>
向前往前走:您還可以使用goBack
, goForward
和go
方法來導航,向前或到歷史記錄堆棧中的特定點。
<code class="javascript">history.goBack(); // Go back to the previous page history.goForward(); // Go forward to the next page history.go(-2); // Go back two entries in the history stack</code>
以這種方式使用useHistory
您可以在React應用程序中以編程方式控制導航。
雖然useHistory
是一種用於編程導航的強大工具,但有幾個常見的陷阱需要注意:
useHistory
已被棄用並由useNavigate
取代。在較新版本的React路由器中使用useHistory
將導致錯誤。始終檢查您使用的React路由器的版本,並使用適當的掛鉤。useHistory
進行導航可能表明您的應用程序路由結構中的設計選擇不佳。嘗試在可能的情況下使用聲明性路由,使用Link
和NavLink
組件,以使導航保持直接和可維護。useHistory
進行導航,並試圖通過其管理狀態會導致混亂。了解您應用程序中導航歷史記錄與狀態管理之間的分離。對於狀態,請考慮使用React的狀態管理解決方案,例如上下文,REDUX或MOBX。replace
:不必要的replace
可以防止用戶使用後面按鈕導航到先前訪問的頁面,從而使它們混淆。僅當您有特定原因這樣做時,請使用replace
。可以通過使用使用state
屬性將對像傳遞到push
或replace
方法來實現在使用使用useHistory
之間的路線之間的狀態。您可以做到這一點:
傳遞狀態:導航到新路線時,您可以包括狀態對象。例如:
<code class="javascript">const history = useHistory(); history.push({ pathname: '/profile', state: { id: 123, name: 'John Doe' } });</code>
訪問狀態:在/profile
路由呈現的組件中,您可以使用react-router-dom
的useLocation
訪問狀態。
<code class="javascript">import { useLocation } from 'react-router-dom'; function Profile() { const location = useLocation(); const { id, name } = location.state || {}; return ( <div> <h1>Profile</h1> <p>ID: {id}</p> <p>Name: {name}</p> </div> ); }</code>
通過遵循以下步驟,您可以在使用useHistory
之間在路由之間導航時有效通過和利用狀態。
useHistory
和useNavigate
都是來自React路由器的掛鉤,可啟用程序化導航,但它們屬於庫的不同版本,並且具有一些關鍵差異:
版本兼容性:
useHistory
來自React Router V5,已被貶低,在React Router V6中有利於useNavigate
。useNavigate
是React路由器V6中的當前推薦掛鉤。語法和用法:
useHistory
,您通常會使用諸如push
, replace
, goBack
, goForward
和go
類的方法。useNavigate
,掛鉤返回一個函數( navigate
),您可以使用路徑和選項來調用該功能,以實現相同的結果。例如, navigate('/about')
或navigate('/about', { replace: true })
。通過狀態:
useHistory
中,您將通過對象push
或replace
state
屬性。useNavigate
,您可以在調用navigate
時將state
對像作為選項傳遞。<code class="javascript">// useHistory history.push({ pathname: '/profile', state: { id: 123 } }); // useNavigate navigate('/profile', { state: { id: 123 } });</code>
相對導航:
useNavigate
支持相對路徑導航,允許您使用..
在路徑字符串中使用。在useHistory
中不支持該路徑字符串。背面和前嚮導航:
useHistory
可直接提供諸如goBack
和goForward
類的方法。useNavigate
,您可以通過調用navigate(-1)
背部並navigate(1)
來實現相同的效果。在確定要使用哪種掛鉤的情況下,了解這些差異至關重要,這取決於您的項目正在使用的React路由器的版本。
以上是您如何使用使用史在路線之間進行編程導航?的詳細內容。更多資訊請關注PHP中文網其他相關文章!