watch(() => route.params.id, (id) => {
if (id) load(id)
})
详情页把 route.params 解构成 id 放进 watch,点相关文章切换后页面还是上一篇的内容,watch 一次都没进。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,解构拿到的是一次性快照,后续参数变化不会反映到那个变量上,watch 监听的是一个不再变的普通值。路由复用同一个组件实例,也不会重建。
「route.params 解构」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
报错里带路径的,先去看那个路径在不在、权限对不对。
处理上按这个顺序:watch 直接监听 () => route.params.id,函数形式才会每次重新取值;或者在 onBeforeRouteUpdate 里处理参数变化;别在 setup 顶层解构 route,需要响应式就用 toRefs。
改完只确认一件事:点相关文章后地址变了内容跟着换,请求参数也是新的 id。
