【问题标题】:Why mobx computed getter doesn't call after change value为什么 mobx 计算的 getter 在更改值后不调用
【发布时间】:2022-01-16 00:16:07
【问题描述】:

我有TestStore 和可观察属性fields

当我点击任何名称时,我调用操作changeOneName 并更改fields 中的一些对象。计算 getter hasError 再次调用,我看到 console.log("hasError computed");

为什么我在将名称更改为'ErrorName' 后第二次看不到console.log("valueFields computed");

https://codesandbox.io/s/vibrant-lumiere-cv2tp?file=/src/TestStore.js

【问题讨论】:

    标签: mobx mobx-react mobx-react-lite


    【解决方案1】:

    您只更改了对象的name 属性,而不是对象本身。而Object.values 仅取消引用您的fields 对象的直接值(对象),而不是内部事物,例如name。所以 computed 不需要重新运行,因为 computed 中引用的内容没有改变。

    hasError 确实重新运行了,因为您实际上取消了其中的 name 属性的引用,因此当 name 更改时它会重新运行。

    希望它有意义。

    【讨论】:

    • 重新渲染是因为你的整个 App 组件是 observer (这或多或少与 computed 相同,但对于 React 组件)并且你在其渲染中取消引用 name。组件本质上订阅了对渲染内部(基本上是函数内部)取消引用的每个字段的更改。
    猜你喜欢
    • 2023-03-15
    • 2019-06-21
    • 2022-09-27
    • 2019-03-24
    • 2016-12-13
    • 2019-06-27
    • 2021-12-19
    • 2020-07-23
    • 1970-01-01
    相关资源
    最近更新 更多