要使用React路由器中的useHistory
在路由之间进行程序化导航,您首先需要从react-router-dom
库中导入钩子,然后在组件中使用它。这是有关如何使用useHistory
进行导航的分步指南:
导入useHistory
:从组件文件开始时从react-router-dom
软件包中导入useHistory
开始。
<code class="javascript">import { useHistory } from 'react-router-dom';</code>
初始化useHistory
:在您的功能组件内,调用useHistory
获取历史记录对象。
<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中文网其他相关文章!