【问题标题】:Mobx how to compute values in stateMobx如何计算状态值
【发布时间】:2021-04-11 10:48:46
【问题描述】:

我是 Mobx 新手,不知道如何计算商店中的值。

我正在关注docs description of using the 'computed' modifier

这是我的(删减的)appState:

export default class AppState {
    constructor() {
        /* MOBX STATE */
        extendObservable(this, {
            // Links
            'links': [],

            'updateLinks': action((newlinks) => {
                this.links = newlinks;
            }),

            'linksWithComments': computed(() => this.links),
        });
    }
}

'links' 在我的 React 组件中工作正常,但是当我添加 'linksWithComments' 时,我看到了这个错误:

Uncaught Error: [MobX] 'keys()' can only be used on observable objects, arrays, sets and maps

我做错了什么? 'links' 是一个数组,据我所知它是可观察的,那么错误是什么意思?我用谷歌搜索了错误消息,但没有找到任何解释发生了什么的东西。

我也试过这种形式:

get linksWithComments () { return 2*3; },

在这种情况下,'linksWithComments' 是未定义的。

版本:

"mobx": "^6.1.8",
"mobx-react": "^7.1.0",
"mobx-react-lite": "^3.2.0",

谢谢!

【问题讨论】:

    标签: mobx mobx-react


    【解决方案1】:

    在类中使用 MobX@6 的首选方法是使用 makeAutoObservablemakeObservable

    class AppState {
      links = [];
    
      constructor() {
        makeAutoObservable(this);
      }
    
      updateLinks = (newLinks) => {
        this.links = newLinks;
      };
    
      get linksWithComments() {
        return this.links.filter((link) => link > 0.5);
      }
    }
    

    你试过了吗?

    我制作了Codesanbox example 供你探索!

    More info in the official docs

    【讨论】:

    • 感谢您提供的详细示例。这种构造似乎确实适用于我的(大量重构!)代码。我仍然很好奇为什么我的原始代码不起作用?
    • 我的猜测是 extendObservable 不应该与计算值或类似的东西一起使用。无论如何,最好使用文档中的惯用方式
    猜你喜欢
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 2019-03-24
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多