mobx 如何让组件外状态驱动视图

430 阅读1分钟

背景:

面试被问到mobx 原理 虽然平时react有写mobx 但是还真没研究过原理。所以此次面试被GG

mobx 如何实现组件外状态-> 渲染(data ->view)

重要的两个依赖包:

mobx

mobx-react

要实现数据驱动视图必须使用到以上两个依赖包

过程大致分为两部:(下文以class 组件为例)【mobx v6.6.2】

  1. 数据与组件建立关联关系

  2. 数据修改 触发件建update

问题1: 数据与组件建立关联关系

答:通过两个包装器 (@observer,@observable)和一个globalState 建立了联系。 如下图:

关键源码:

问题2:数据修改如何驱动组件更新

答:上述建立关联关系时通过 value 的 get 方式 做的,那么触发更新是通过 value set 方式做的。如下图

关键源码如下:

以上流程部分只是针对class 组件 ,mobx 中 区分了class 和function

observer --》》 mobx-react -

|---makeClassComponentObserver() 类组件

|---observerLite() 函数组件

但是 原理都是一样的。

PS:

ObservableValue 只是最基础的数据类型,针对于 array map set 等 mobx 类似于vue 一样 重写了他们的属性方法 达到监控数据变化。所以mobx 5.0+ 也做了类似于vue3 的改动 ,引入proxy 达到复杂数据的change 监控.