const params = new URLSearchParams(location.search);
const [page, setPage] = useState(Number(params.get('page')) || 1);
addEventListener('popstate', () => setPage(readPage()));

地址栏是 ?page=3&status=done,列表停在第 1 页且筛选是全部;手动改成 page=2 回车,页面没反应。分享链接给同事打开也是第一页。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,同步只做了 state 到 URL 的写入,没有反向解析,初始化时用了默认值。浏览器前进后退只改地址,不触发重新取数。

「URL 与状态同步」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

处理上按这个顺序:初始化时从 URLSearchParams 读一次作为初始 state;监听 popstate 把参数写回 state 并重新请求;页码和筛选变化统一走一个更新函数 同时改 URL;直接粘贴带参数的链接 确认首屏就是第三页。

改完只确认一件事:打开 ?page=3&status=done 直接显示第三页的已完成数据,后退一次回到第二页。

作者 9823189