在MobX中使用when反应

时间:2019-01-29 10:22:05

标签: reactjs mobx

我想了解MobX中when的用法

我刚刚创建了一个简单的存储(ErrorStore),我想用它来保存应用程序错误,并且当可观察到的更改通知并指定(或另一个组件)发送错误详细信息时,可以使用该存储。 我正在使用一个可观察到的错误,它是一个简单的对象,并且具有计算所得的属性来拦截更改,每次我将错误消息和activate标志设置为true时,我都会将其重置。 我不知道为什么带有新错误的控制台消息仅出现一次。 有人知道我在做什么错吗? 干杯

class ErrorStore {

    @observable error;

    constructor() {
        this.error = { 
            activate: false,
            message: ''
        }

        when (
            () => { this.errorGenerated; console.log("New error generated" , this.errorGenerated ) }  ,
            () => { 
                this.doRequest()
            }
        );

    }


    @computed get errorGenerated () {
        return (this.error.activate === true && this.error.message.length > 0);
    }

    @action setError = (message) => {
        this.error = Object.assign( this.error, { 
            activate : true,
            message : message
        })
    } 


    doRequest = async () => {
        let r = await axios.post({ 
            url : "/myendopoint",  
            data : { 
                error: this.error.message
            }
        });

        if(r.success) {
          console.log("Error has been sent")
                  this.reset()
        }
    }

   @action reset = () => {
        this.error = {
            activate: false,
            message: '',
        }
    }
}

1 个答案:

答案 0 :(得分:0)

基本上,您需要在第一个函数(谓词)时添加return

when (
() => { console.log("New error generated" , this.errorGenerated ); 
        return this.errorGenerated;  
      },
() => { 
        this.doRequest()
      }
);

那么,当this.errorGenerated返回true时,它将接下来调用this.doRequest()(将在何时处置整个对象)

有关更多参考,请查看以下示例:https://codepen.io/wizly/pen/yXapdZ

对于文档,请检查以下内容:https://mobx.js.org/refguide/when.html