浅层改 URL 不会切换组件
实测形态:/clips 根页面 vs /clips/[id] 详情路由
/clips根页面点击剪藏后,只做浅层 URL 变更,用户始终停留在根页面组件上。- 正文能正常显示:它来自
/api/clips/:id。 - 上下文绑定
setContentContext只写在ClipDetailClient.tsx(详情路由组件)里 → 永远不会执行。 - 对照检查 notes、feeds 都有绑定,只有 clips 根页面有这个缺口。
修法:在真正渲染内容的那一层补上与详情路由一致的绑定 effect(跟随选中项,取消选中/卸载时清空);或者让选中真正走路由切换。
可迁移的判断
- 「同一个对象,界面显示有、下游却认为没有」这类双状态,先问:这两个状态是不是由同一份组件生命周期的 effect 驱动的?
- 有「根页面 + 详情路由」两种入口的模块,绑定逻辑必须两处都有,或者下沉到共用的渲染层。只写在一处,另一处就是静默缺口。
- 浅层改 URL 的代价是:URL 是给人看的,不是给组件树用的。依赖「路由变了组件就会跟着重建」的假设会失效。
相关
- 改版后旧路由仍指向旧实现 —— 同族:入口指向的不是你以为的那份
- 两个执行入口共用一套业务规则 —— 同一取向:两条入口要么共用一层,要么必然漂移
- 页面切换的四种刷新要分清 —— 「地址变了」属于哪一种变化,要先分清
- 改协议要同时改两端
- 列表切换要用master-detail而非重建列表