筛完点进一篇文章再按后退,筛选框全部清空,列表回到默认状态,用户只能从头再重新勾选一遍。乍看像缓存或者权限的锅,追下去往往不是。
const p = new URLSearchParams(location.search);
p.set('brand', 'a');
history.replaceState(null, '', '?' + p);
追下去是这么回事:筛选状态只存在脚本变量里,地址一直没变,后退恢复的仍是上一个地址的初始状态,页面看起来就像被别人重置过一样。
「筛选状态 URL」这类改动最怕改一半,回滚脚本先准备好,再动生产。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。
具体做法是,每次筛选之后都用 replaceState 把当前条件写进地址栏里去;页面加载时按地址里的参数把控件逐个回填好;监听地址变化,在用户后退时重新拉取列表数据。
验收就看一点,后退回来筛选条件还在,刷新页面之后也不会丢,状态和地址一致。
