Svelte中input值绑定store的异常问题咨询
Svelte Store 绑定Input值的问题分析
这是你的实现错误,和Svelte本身无关。
问题根源
当store存储的是带value键的对象时,对象属于引用类型——你直接修改对象内部属性的操作,相当于绕开了store的set方法直接篡改了底层数据。这时候store的订阅机制不会被触发,但数据已经实际变更,就会出现“明明调用set前打印,数据却已经变了”的诡异现象。
为什么存原始值时看起来正常?
原始值(字符串、数字等)是值传递,你没办法直接修改store内部的原始值,只能通过set方法传入新值来更新,自然不会出现引用篡改的问题。但这只是场景巧合,不代表你的实现逻辑没有漏洞——如果后续把store改成存储对象,还是会踩同样的坑。
修复方案
- 所有store数据变更必须通过官方提供的
set或update方法,禁止直接操作store内部的引用类型数据 - 若存储对象,更新时要返回新对象,比如用扩展运算符生成新对象:
store.set({ ...currentValue, value: newInputValue }); - 或者使用
update方法来处理:store.update(prev => ({ ...prev, value: newInputValue }));
内容的提问来源于stack exchange,提问作者Hovadko
相关产品推荐
相关产品推荐

