gpt4 book ai didi

javascript - solid-js中如何只监听某个对象的某个值?

转载 作者:行者123 更新时间:2023-12-05 01:50:04 26 4
gpt4 key购买 nike

const App: Component = () => {
const [obj, setObj] = createSignal({
name: "John",
age: 30,
})

createEffect(
on(
() => obj().name,
(value) => {
console.log("name", value)
}
)
)
return ()=>(<button onClick={()=> setObj(obj=> ({ ...obj, age: obj.age + 1}))}>+</button>)
}

当我更改age时,createEffect也会被触发,我只想监听name,类似于watchVue3 中。

function setup(){
const obj = reactive({
name: "John",
age: 30,
})
watch(()=> obj.name,(value)=>{ console.log("name", value) })
}

有什么好的想法吗?

最佳答案

SolidJS 不会跟踪信号对象的各个属性。

此外,每次解构对象时值发生变化时,您都会覆盖该对象(又名。{...obj, })。

如果您希望 createEffect 跟踪您的个人属性,请尝试 createStore

这是使用 createStore 而不是 createSignal 编写的示例

import {createStore} from 'solid-js/store'; // <- This is very important

const App: Component = () => {
const [obj, setObj] = createStore({
name: "John",
age: 30,
})

createEffect(() => console.log(obj.name));

return (<button onClick={setObject('age', obj.age + 1)}>+</button>)
)
}

如果你运行这个例子,你会看到 console.log(obj.name) 只会运行一次,这是因为 solid-js 会在将它们保存在一个createStore

关于javascript - solid-js中如何只监听某个对象的某个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73440069/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com