跳转后在 nextTick 里查 .detail-title,拿到的是 null,过一百毫秒再看又有了,代码只能靠加延时硬撑。乍看像缓存或者权限的锅,追下去往往不是。

watch(titleRef, (el) => {
  if (el) el.scrollIntoView()
}, { flush: 'post' })

追下去是这么回事:nextTick 等的是当前组件树更新完,异步路由组件还没解析完,DOM 根本不存在。懒加载组件要等 import 的 promise 落地,时间点比 nextTick 晚。

「nextTick 路由 DOM」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。

偶发问题先统计频率,一小时几次和一天一次,查法完全不同。改完顺手把文档补一句,省得下次自己重新推一遍。

监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

具体做法是,把 DOM 操作放到 onMounted 或者路由的 afterEach 之后,别抢在解析前;需要固定时机就 watch 目标元素的 ref,出现后再处理;确实要等就加重试,别用固定延时。

验收就看一点,跳转后能直接拿到标题节点,不需要刷新或额外延时。

作者 9823189