useQuery({
  queryKey: ['price', sku], queryFn: fetchPrice,
  staleTime: 30_000, refetchOnWindowFocus: true
});

运营上午十点改完价,下午四点用户端还是 99,客服收到 7 个投诉。刷新页面数字也不动,重新打开浏览器才变。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:staleTime 只控制什么时候在后台重新请求,内存里的缓存仍然有效,重新挂载先返回旧数据。页面没有监听窗口聚焦和网络恢复,窗口一直开着就永远不刷新。

「staleTime 缓存过期」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

处理上按这个顺序:价格这类数据把 staleTime 压到 30 秒以内;打开 refetchOnWindowFocus 和 refetchOnReconnect;关键价格展示更新时间 并给一个手动刷新入口;等一分钟再切回标签页 看是否自动拉新值。

确认没问题再收工,后台改价后切回标签页,30 秒内价格自动变成新值,更新时间同步变化。

作者 9823189