在MobX中使用何时反应

问题描述 投票:0回答:1

我试图了解在MobX中何时使用

我刚创建了一个简单的存储(ErrorStore),我想用它来保存应用程序错误,以及当observable更改notify和enpoint(或另一个组件)以发送错误详细信息时。我正在使用一个可观察的错误,这是一个简单的对象,并且具有计算属性拦截更改,每次我将错误消息和激活标志设置为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: '',
        }
    }
}
reactjs mobx
1个回答
0
投票

基本上你需要在第一个函数(谓词)中添加return

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

那么什么时候当this.errorGenerated返回true时它会调用next this.doRequest()(这会将整个部署时)

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

对于doc,请查看:https://mobx.js.org/refguide/when.html

© www.soinside.com 2019 - 2024. All rights reserved.