最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Mobx 你懂了吗?

    正文概述 掘金(丽yuan儿)   2021-02-27   796

    Mobx 是什么?

    Mobx 是一个状态管理库。

    Mobx 哲学

    任何源自应用状态的数据都应该自动地获取。

    "Anything that can be derived from the application state, should be derived. Automatically."

    Mobx 你懂了吗?

    Mobx 原则

    Mobx 支持单向数据流,即动作更新状态,状态更新视图。

    Mobx 你懂了吗?

    为什么将 React 和 Mobx 结合使用?

    对于应用开发中常见的问题,React 和 Mobx 都给出了最优和独特的解决方案: React 通过使用虚拟 DOM 对 UI 渲染进行了优化; Mobx 通过使用响应式状态图表,将应用状态与 React 组件同步的机制进行了优化,即只有在状态更新的时候才对组件做出改变。 归根结底,React 组件只是状态的华丽展示,而状态的衍生可以由 Mobx 来管理。

    Mobx 核心概念

    1. Observable state(可观察的状态)

    Mobx 为现有的数据结构提供了可观察的功能,被观察的数据可以是原始值,也可以是引用值。

    2. Computed values(计算值)

    计算值一般通过观察值衍生,当观察值改变的时候,计算值会自动更新,并在它不再使用时将其优化掉。

    衍生:任何源自状态并且不会有进一步相互作用的东西就是衍生。衍生可以有多种形式存在,比如:用户界面、衍生数据

    class TodoList {
        @observable 
        todos = [];
        
        @computed 
        get unfinishedTodoCount() {
            return this.todos.filter(todo => !todo.finished).length;
        }
    }
    
    3. Reactions(反应)

    Reactions 会对 state 变化作出反应,但它不是产生一个值,而是产生一些副作用,比如更新 UI。可以通过使用 Mobx 提供的 when、autorun、reaction 来创建自定义的 Reactions。

    副作用:一个行为通常有一个目标作用,如果这个行为产生了其他的作用,都被成为副作用。比如说 Array.concat() 的设计目标是做数组拼接,但是也可以用来进行数组复制:const arr = [1, 2, 3]; const copy = arr.concat(),那么这个复制的作用就可以被称为副作用。

    4. React 组件

    可以通过给 React 组件添加 observer 装饰器(由 mobx-react 提供),将无状态组件变成响应式组件。

    Mobx 对何作出反应?

    MobX 会对在追踪函数执行过程读取现存的可观察属性做出反应。

    • 追踪函数:包括 computed 表达式;observer 组件的 render() 方法;when、reaction 和 autorun 方法的第一个入参函数。
    • 读取:对象属性的间接引用(user.name 或者 user['name'])。
    • 过程:只追踪在函数执行时被读取的 observable 值,这些值是否由追踪函数间接或直接使用并不重要。
    1. 正确的
    • 在追踪函数内进行间接引用
    • 在追踪函数内访问数组属性或者方法
    • 使用映射中还不存在的项(Map)
    2. 错误的
    • 在追踪函数外进行间接引用
    • 一个引用了 observable 对象或者observable 对象引用的变量,这个变量是不可观察的
    • 在追踪函数内数组索引越界访问
    • 使用了"observable"但没有访问它的任何属性
    • 使用了 observable 对象中还不存在的属性
    3. 注意事项:
    • 如果给一个组件传入了一个参数(参数是 observable 的值),为了确保该组件能够正确做出反应,该组件也应该是 observer,但是如果这个组件来源于外部库,我们就没法控制了,这时可以使用 observer 包裹参数或者利用 组件来解决这个问题。例子
    • 多个组件进行参数传递,出于性能考虑,越晚进行间接引用越好。例子

    起源地下载网 » Mobx 你懂了吗?

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元