Mobx计算属性(getter)未随localStorage更新问题排查
根本原因解析
Mobx的计算属性(如你代码里的count getter)实现响应式更新的核心是依赖追踪机制——它只会对自己能识别的可观察依赖项的变化做出反应,你的问题恰好踩中了这个机制的边界:
makeAutoObservable确实会将类中的getter标记为计算属性,但这个getter的取值来源是localStorage,这是浏览器原生的同步存储对象,不属于Mobx的可观察体系。- 当第一次计算
count时,Mobx仅会记录当前localStorage返回的静态值,但它无法监听localStorage的后续修改——Mobx没有能力追踪原生浏览器API的状态变化。 - 所以你调用
setCount更新localStorage后,虽然原生存储里的值已经改变,但Mobx不知道自己的计算依赖已经失效,不会重新执行countgetter的逻辑,直到页面硬刷新(类重新初始化,getter被再次调用)才会读取新值。
关键逻辑补充:Mobx的响应式是建立在自身管理的可观察状态之上的,只有当计算属性依赖的是Mobx标记的可观察变量(比如observable修饰的属性、其他计算属性)时,才会自动触发重新计算。原生存储、普通JS变量这类非可观察项的变化,完全不在Mobx的感知范围内。
内容的提问来源于stack exchange,提问作者Drew R
相关产品推荐
相关产品推荐

