E1.12.4toggle state persistence设计研究
切换按钮的状态在页面刷新后仍需保持
别名: 刷新丢失开关 · 切换状态持久化 · persist toggle
概念解释
切换按钮显示的是一份设置,不是这次会话的心情。刷新、重进页面、从另一台设备打开,那枚键仍应反映同一份值。刷新后弹回未按下,而数据里其实还开着——或反过来,外观记得开着、数据已经丢了——用户会按外观去改世界,把值再翻一次。保持指的是外观与存储一起活过页面生命周期,不是浏览器碰巧还没卸掉 DOM。
机制
人把切换当成对世界状态的窗口。窗口在刷新后若回到默认,会被理解成「系统把我的选择清掉了」,于是重新打开;若数据其实还在,这次重开会关掉它。两端不一致时,外观是被信任的那一端,因为它能被看见。单页应用尤其容易只把值放在组件本地 state,路由一换就丢,而服务器或文档模型里可能还留着。多标签页会再加一份:A 页开着,B 页未同步,刷新 B 把 A 的值盖掉。持久化失败看起来像随机翻转,根因是生命周期把视图和源拆开了。
怎么研究
让人打开某项设置,然后强制刷新、后退再前进、换一个标签打开同一 URL。记录外观、本地存储、服务器三处是否一致。
自变量:值写在哪一层(仅组件 / localStorage / 服务器)、多标签是否同步。 因变量:刷新后的错误翻转、口头「我不是又关了吗」、跨标签冲突。
实验室若只用内存里的演示页,刷新根本不会发生。要用真的重新加载,包括移动端从后台杀进程后的冷启动。
边界
文档内的格式切换(这篇加粗)应随文档走,不应随用户账号全局保持——那是另一份值。一次性的「显示密码」不应活过刷新。预览模式这类会话级切换可以只活在这一次浏览,但要在文案上说清「仅此次」。只读演示数据没有可写源,保持无从谈起。
怎么落地
- 让切换的外观从持久源读取,刷新后走同一条读取,不要让组件的初始值硬编码为关。
- 写入在交互当时就落到源,而不是等卸载。
- 多标签打开同一设置时,以源为准做同步或提示冲突,不要各写各的本地态。
- 验证:打开设置,硬刷新,再冷启动。外观与实际值有一次不一致,或用户为了「恢复」而把值翻反,持久化就失败了。