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);