一、computed
把其他可观察数据用自己的方式组合成新的可观察数据
二、autorun
当可观察数据发生变化,自动执行对可观察数据依赖的行为,既回调
三、when
用作某条件成立才执行某逻辑的情况,是一个简单的api
四、reaction
autorun 的变种,对于如何追踪 observable 赋予了更细粒度的控制。
reaction的使用场景:在没有数据之前,我们不想也没有必要实现写缓存的逻辑,可以使用reaction来实现在数据第一次被填充之后,来实现写缓存的逻辑。
reaction的参数为两个函数:
第一个函数引用可观察数据,并返回一个值,这个值会作为第二个函数的参数
在初始化的阶段,第一个函数会被先执行一次,这样mobx就知道哪些可观察数据被引用了,并在这些数据被修改后,执行第二个函数。这样不必先执行一遍副作用,就可以建立副作用与可观察数据之间的联系。
无论是否更改可观察数据,autorun都会先执行一次,因为没有先行执行的话,就不知道哪些可观察数据被引用,就更做不到这些数据被修改时,触发autorun的逻辑了。
但是如果可以单独告知mobx,我们引用了哪些可观察数据,这些副作用的逻辑,就不会先行执行了。
使用reaction解决上述问题
computed可以将多个可观察数据组合成一个可观察数据
autorun可以自动追踪其引用的可观察数据,并在数据改变的时候重新触发
when提供了条件执行逻辑,是autorun的一种变种
reaction只能通过分离可观察数据声明,以副作用的方式对autorun作出改进
when函数
第一个参数只能根据可观察数据来计算布尔值,不能只根据普通变量;
第一个参数的函数一开始就返回真,那么第二个参数的函数就会立即执行
autorun
computed作为装饰器,computed值可以作为新的可观察数据的
autorun执行的条件是其引用的可观察数据发生了变化
computed作为普通函数检测其他数据的变化
computed中传入一个无参数的函数,需要return
observe中传入一个具有change参数的函数,change就是foo中被检测数据变化时候的新老值,这个值是obeservableValue,注意无论被检测的哪个值变化的时候,都会触发observe中的函数
观察数据变化的方式
“computed”计算值,将其他可观察数据与你想要的方式组合起来变成一个新的可观察数据,
“autorun”自动运行,自动运行传入autorun的参数,在可观察数据被修改之后,自动去执行依赖可观察数据 的行为(传入的函数)
“when函数”接收两个函数参数,第一个函数必须根据一个可观察数据返回一个布尔值(不能根据普通变量),当该布尔值为true的时候,就去执行第二个函数,并且保证最多只会执行一次
" reaction" 第一个函数引用可观察数据并返回一个值,这个值回作为第二个函数的参数,第一个函数会被先执行一次,这样mobx就知道有哪些数据被引用了,并在这些数据被修改后执行第二个函数,
被用到的场景:在没有数据之前,我们不想也没有必要去调用写缓存的逻辑,可以用reaction来实现在数据第一次被填充后才启用写缓存逻辑
观察数据变化的方式
" autorun" 自动运行
自动运行什么:传入autorun的参数,
作用:在可观察数据被修改之后,自动去执行可观察数据依赖的行为(传入的函数)
" computed " 计算值 他将其他可观察数据与你想要的方式组合起来变成一个新的可观察数据,
一种用法:可作为普通函数,二:作为decorator
" reaction" 第一个函数引用可观察数据并返回一个值,这个值回作为第二个函数的参数,第一个函数会被先执行一次,这样mobx就知道有哪些数据被引用了,并在这些数据被修改后执行第二个函数,
被用到的场景:在没有数据之前,我们不想也没有必要去调用写缓存的逻辑,可以用reaction来实现在数据第一次被填充后才启用写缓存逻辑
“when函数”接收两个函数参数,第一个函数必须根据一个可观察数据返回一个布尔值(不能根据普通变量),当该布尔值为true的时候,就去执行第二个函数,并且保证最多只会执行一次
观察数据变化的方式