用户手动切到暗色,刷新页面回到浅色,每进一个页面都要重切一次,移动端复现率 100%。日志里能对上时间点,这种反而好排。

切换函数只改了 DOM 上的属性,没有把选择写进 localStorage;首屏初始化又只读系统偏好。写入被放在异步回调里,页面跳转时还没执行完。这一点先确认清楚,后面就不用反复试。

const saved = localStorage.getItem('theme');
const theme = saved || (matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light');
document.documentElement.dataset.theme = theme;

「主题偏好未保存」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

别只看报错的最后一行,往上看几行,真正的起因通常在上面。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

处理上按这个顺序:切换时同步写入 localStorage 再改 DOM;首屏读取顺序定为本地存储优先 其次系统偏好;切一次主题后连续刷新三个页面 确认选择保留。

结果对不对很好判断,切到暗色后刷新首页、列表页、详情页都保持暗色。

作者 9823189