我一直在阅读和寻找replaceState()&之间的优缺点pushState()。另请阅读Mozilla的文章和该有趣的测试,但我仍然不清楚其中的区别。
有人愿意解释它们的区别吗?
Answers:
replaceState()会在浏览器中更改网址(即,按“后退”按钮不会使您返回)
pushState() 会更改网址,并在浏览器历史记录中保留旧网址(即,按“后退”按钮会将您带回)
从您的链接
history.replaceState()的操作与history.pushState()完全相同,不同之处在于replaceState()会修改当前历史记录条目,而不是创建一个新的条目。
当您要响应某些用户操作而更新状态对象或当前历史记录条目的URL时,replaceState()尤其有用。
如果您只想更新历史记录条目,请使用replaceState()否则使用pushState(),它将保留旧条目并创建一个新条目。它们相似,但是两者具有不同的效果,因此取决于您是否要替换或创建新的历史记录条目。
可以将其想象为我正在通过将一张纸牌叠放在另一张纸上(面朝上)来分配一副纸牌,而您只能将头顶纸牌堆放在一堆中(即我所发行的最后一张纸牌)。假设我在堆上放了个《红心大战》。现在,如果我使用下一张卡replaceState,那么我将“红心杰克”摘下并放下下一张卡。卡数相同,因为我们只是更换了顶卡。如果我pushState改用了,我将把下一张纸牌放在“红心杰克”的上面(所以现在两者都存在于纸堆中,并且纸堆高出一张纸牌)。
类似于用URL交换卡,这就是修改URL历史记录的方式。