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

标签 javascript typescript solid-js

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/

相关文章:

javascript - 语法错误: "JSON.parse: unexpected non-whitespace ..." when returning JSON from PHP

javascript - 在 GitHub Pages 构建期间缩小 JavaScript?

reactjs - 如何使用 Typescript 将组件传递到 react 路由器路由中?

html - 在不更改其值的情况下将文本附加到输入字段?

javascript - SolidJS - 如何获取当前组件实例

javascript - 如何在 Javascript 中将数组重新调整为一系列值?

reactjs - 如何在 React/TypeScript 中访问类元素变量

solid-js - 全局状态的 `createContext()` 和 `createSignal()` 之间的区别

javascript - 为什么 Object.assign 适用于数组?