react Router的history模式中,push 和 replace 方法有的区别
文章类型:React
发布者:hp
发布时间:2025-02-25
在react开发过程中,push和replace都是用于导航的方法,那么他们有什么区别呢?
(1)push:会往历史栈中追加新纪录,也就是长度+1,并且后退可以返回原页面
(2)replace:替换当前记录,长度保持不变,后退直接跳过原页面
1:push
navigate('/new-url')
2:replace
navigate('/new-url', { replace: true })
(1):push
1:用户主动导航,点击菜单/链接跳转
2:多步骤流程:表单分步填写
(2)replace
1:阻断性跳转:说白了就是禁止返回原页面
2:状态更新替代:说白了就是避免重复提交
(1):API上
1:push调用window.history.pushState
2:replace调用window.history.replaceState
(2):SEO影响上
1:push新增独立历史记录,方便爬虫追踪
2:replace替换当前记录,不利于爬虫进行路径分析
(3):组件渲染上
1:push、replace触发路由匹配的组件树更新
1:从用户预期上,push适用于需要返回前一段流程,而replace则强制进入新上下文
2:从数据安全上,push允许历史回溯,而replace避免敏感操作重复
3:从路径逻辑上,push多层级导航树,而replace则单入口扁平路径
七:拓展
1:获取当前行为
const location = useLocation();
console.log(location.state?.isReplace); // 自定义标识
2:动态选择模式
navigate('/target', {
replace: isUnauthorizedRequest
});
3:滚动控制行为
// 手动控制滚动位置
if (replace) window.scrollTo(0, 0);