zoukankan      html  css  js  c++  java
  • [Web 前端] mobx教程(五)-Mobx常见问题及解决方案(1)Mobx使用严格模式

    copy from : https://blog.csdn.net/smk108/article/details/83185745

    mobx在严格模式下,不允许在 action 外更改任何状态。但是不同版本严格模式的用法不同,3.x、4.x、5.x三个版本下的严格模式用法。

    1、mobx@3.x:useStrict(boolean)

    2、mobx@4.x:configure({ enforceActions: boolean })

    迁移说明:https://github.com/mobxjs/mobx/wiki/Migrating-from-mobx-3-to-mobx-4#things-that-just-have-moved

    3、mobx@5.x:configure({ enforceActions: value })

    mobx@5.x之后enforceActions不再接收boolean值,传入boolean值会提示如下错误:

    可接收的值为:

    "never" (默认): 可以在任意地方修改状态

    "observed": 在某处观察到的所有状态都需要通过动作进行更改。在正式应用中推荐此严格模式。

    "always": 状态始终需要通过动作来更新(实际上还包括创建)。

    文档地址:https://cn.mobx.js.org/refguide/api.html#enforceactions

    4、关于严格模式的说明

    Mobx的状态原则上是允许在任意地方进行修改,严格模式下,不允许在 action 外更改任何状态,实际上,在异步action中修改也是不允许的。我们以异步action为例看一下严格模式。

    // 不允许在动作之外进行状态修改
    mobx.configure({ enforceActions: "observed"}) 
     
    class Store {
    @observable data = [];
    @observable fetchState = "";
        @action fetchData() {
            this.state = "pending"
        //异步请求数据
            fetchDataFunction().then(
                data => {
                    this.data = data
                    this.state = "done"
                },
                error => {
                    this.state = "error"
                }
            )
        }
    }

     在上面的例子中会抛错,异步请求fetchDataFunction的回调函数不是action fetchData的一部分,不能在回调函数中修改state,需要做如下的代码改造。

    // 不允许在动作之外进行状态修改
    mobx.configure({ enforceActions: "observed"}) 
     
    class Store {
    @observable data = [];
    @observable fetchState = "";
        @action fetchData() {
            this.state = "pending"
        //异步请求数据
            fetchDataFunction().then(
                data => this. fetchDataSuccess(data);
                error => this. fetchDataError(error);
            )
        }
    }
     
    @action
    fetchDataSuccess(data){
        this.data = data
             this.state = "done"
    }
    @action
    fetchDataError(error){
        this.state = "error"
    }

     还有其它几种方法可以解决严格模式下异步action修改state的问题,见文档:https://cn.mobx.js.org/best/actions.html


    ---------------------
    作者:smk108
    来源:CSDN
    原文:https://blog.csdn.net/smk108/article/details/83185745
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    bash:express:command not found
    Jquery的window.onload实现
    元素的class和id问题
    安装angular-cli
    [(ngModel)]的实现原理
    bodyparser
    git push不用重复输入用户名和密码(解决方案)
    git提交项目到已存在的远程分支
    angular的$filter服务
    网站上如何添加显示favicon
  • 原文地址:https://www.cnblogs.com/0616--ataozhijia/p/10192716.html
Copyright © 2011-2022 走看看