关于solidjs对对象或者数组使用createSignal,数据不响应的处理思路 最后更新时间:2025年05月25日 ### 问题来源 对某个小玩意儿做开发的时候,发现如果使用数组来构建createSignal,会引发修改数据不响应的情况。 示例: ```javascript let [alterEvent,setAlterEvent] = createSignal( [ { "data":"数据1", "level":"1", }, { "data":"数据2", "level":"1", }, { "data":"数据3", "level":"1", }, { "data":"数据4", "level":"1", } ] ) ``` ### 解决思路 思路有两个:1.使用option配置来处理。2.使用Store来构建 #### 思路一: >Solid 中的几个 API 将 "options" 对象作为可选的最后一个参数。createSignal 的选项对象允许您提供 equals 选项。默认情况下,当调用 signal 的 setter 时,根据 JavaScript 的 === 运算符,仅当新值实际上不同于旧值时,signal 才会更新(并导致依赖项重新运行)。 ```javascript const [getValue, setValue] = createSignal(initialValue, { equals: false }); ``` #### 思路二: 当访问嵌套对象时,store 将生成嵌套 store 对象,这适用于整个树。但是,这只适用于`数组`和`普通对象`。类没有被包装,所以像 Date、HTMLElement、RegExp、Map、Set 这样的对象不会像 store 上的属性一样被细粒度地响应。
Comments | NOTHING