我一直在阅读和寻找优点/缺点之间的 replaceState()和 pushState()。 同时阅读 Mozilla 的 article和这个 interesting测试,但是我仍然不清楚它们之间的区别。
replaceState()
pushState()
有人愿意解释一下他们的不同之处吗?
从你的链接
history.replaceState() operates exactly like history.pushState() 除了 replaceState ()修改了当前的历史记录条目 创造一个新的。 当您希望更新 状态对象或当前历史记录条目的 URL,以响应某些 用户行为。
history.replaceState() operates exactly like history.pushState() 除了 replaceState ()修改了当前的历史记录条目 创造一个新的。
当您希望更新 状态对象或当前历史记录条目的 URL,以响应某些 用户行为。
如果您只是想更新历史条目,那么使用 replaceState(),否则就使用 pushState(),它将保留旧条目并创建一个新条目。它们是相似的,但是都有不同的效果,所以这取决于您是否想要替换或创建新的历史记录条目。
想象一下,我正在发一副牌,把一张牌放在另一张牌的上面(正面朝上) ,你只能拿到最上面一张牌(也就是我发的最后一张牌)。假设我在那一堆里放了一张红桃 J。下一张牌,如果我使用 replaceState,所以我把红桃 J 取下来,然后把下一张牌放上去。卡的数量是一样的,因为我们刚刚更换了顶部的卡。如果我使用的是 pushState,我会把下一张牌放在红心杰克的上面(所以现在两张牌都存在于堆中,而且堆高了一张牌)。
replaceState
pushState
用 URL 交换类似的卡片,这就是修改 URL 历史记录的方法。
replaceState()将 改变的网址在浏览器(即,按后退按钮不会带你回来)
pushState()会更改 URL,并将旧的 URL 保留在浏览器历史记录中(即。按下后退按钮就会把你带回去)