zoukankan      html  css  js  c++  java
  • mobx的实现原理

    1. mobx是基本概念

    Observable  //被观察者
    Observer    //观察者
    Reaction    //响应

    1.1 在被观察者和观察者之间建立依赖关系

    通过一个Reaction来track一个函数,该函数中访问了Observable变量,Observable变量的get方法会被执行,此时可以进行依赖收集,将此函数加入到该Observable变量的依赖中。
    类似于:

    //伪代码
    reaction.track(function() {
        mobx.beginCollect();  //开始收集
        handler();            //被观察函数
        mobx.endCollect();    //结束收集
    })

    1.2 触发依赖函数

    上一步中Observable中,已经收集到了该函数。一旦Observable被修改,会调用set方法,就是依次执行该Observable之前收集的依赖函数,当前函数就会自动执行。

    mobx底层对数据的观察,是使用Object.defineProperty(Mobx4)或Proxy(Mobx5),Mobx4中Array是用类数组对象来模拟的,原始值是装箱为一个对象。

    2. mobx-react如何更新react状态

    import React, { Component} from 'react';
    import { observer } from 'mobx-react';
    
    @observer
    export default MyCom extends Component {
      render() {
        // ...do something
      }
    }

    observer这个装饰器,对React组件的render方法进行track。将render方法,加入到各个observable的依赖中。当observable发生变化,track方法就会执行。
    track中,还是先进行依赖收集,调用forceUpdate去更新组件,一个mobx添加的周期componentWillReact,也会在此时执行。然后结束依赖收集。
    每次都进行依赖收集的原因是,每次执行依赖可能会发生变化。

  • 相关阅读:
    迟到感悟
    让自己记住吧。
    hadoop 数据抽取
    指标导入常用函数
    linux shell中单引号、双引号、反引号、反斜杠的区别
    简单解说Linux命令输出与命令替换
    生成表结构
    ASP.NET MVC3在Visual Studio 2010中的变化
    主键自增归0
    解决包含已存在的php文件,但提示就是找不到的问题
  • 原文地址:https://www.cnblogs.com/mengff/p/12901259.html
Copyright © 2011-2022 走看看