5

嗨,我在商店中使用 MobX,当计算值发生变化时,我需要进行异步反应:

class Store {
    @observable user;
    @observable something;

    @computed get firstParam () {
         return this.user && this.user.params[0];
    }

    async loadSomething () {
        reaction(
                () => this.firstParam,
                async (param) => {
                    const { data: something } = await axios.get(`url/${param}`);

                    runInAction('update state after fetching something', () => {
                        this.something = something;
                    });
                }
            );
     }

}

我想知道使用when而不是reaction除了运行条件之外会有什么区别?

when(
    () => !!this.firstParam,
    async () => {
         // fetch using this.firstParam
    }
)
4

2 回答 2

7

请注意,when它只执行一次,然后停止。因此,在您的情况下,数据只会被获取一次。

于 2016-08-23T15:26:41.897 回答
3
        reaction(
            () => this.firstParam,
            async (param) => {
                const { data: something } = await axios.get(`url/${param}`);

                runInAction('update state after fetching something', () => {
                    this.something = something;
                });
            }
        );

这将只跟踪this.firstParam,当它返回一个新数据时,它将调用

            async (param) => {
            const { data: something } = await axios.get(`url/${param}`);

            runInAction('update state after fetching something', () => {
                this.something = something;
            });

现在,如果你选择when我相信它最终会做同样的事情,取自 mobx 文档:

您可以使用可观察的数据结构作为承诺...完成异步操作后,只需更新您的数据

所以我认为没有理由不在when你的情况下使用。

于 2016-08-21T10:10:43.760 回答