Replies: 5 comments 10 replies
-
个人是支持这种细分用法的,但是不太理解这里的意思
是要将现在的 |
Beta Was this translation helpful? Give feedback.
-
一个动作的定义,就是一次纯粹的数据操作,不应该对外界有隐式的副作用影响,这个是从抽象概念来给它的约定,但是batch的定义,它就是用于收敛一组操作序列,批量执行 |
Beta Was this translation helpful? Give feedback.
-
弱弱地问一下,不太理解需求的来源是什么,为什么要在batch里面既做批量set,以及收集track的行为? |
Beta Was this translation helpful? Give feedback.
-
action默认就应该是batched class Store {
a = 1;
b = 1;
setAB() {
this.a = 2;
this.b = 2;
}
} 这里setAB只执行一次reaction是很符合用户的心智的, 一个action只渲染一次 至于在autorun里面track依赖, 我觉得应该有个叫runInAutorun的新api... |
Beta Was this translation helpful? Give feedback.
-
好像在实践中很少需要在action中做依赖收集的,但是确实存在极个别案例。 不过特别希望能够统一define的语义,即
导出多两个observable的api
|
Beta Was this translation helpful? Give feedback.
-
感觉也是受了mobx的影响,action与batch现在的语义是一样的,只不过action是作为高阶函数而存在,这个总感觉怪怪的,还记得formily为啥不用Mobx的一大原因就是因为action内部不能track数据,所以reactive就支持了track,但是问题来了,
如果真的就只是单纯的action(动作),那还track它内部的数据,其实也是不合理,因为我们要保证动作的纯粹性,收集依赖的话,会导致动作内部的逻辑不可预测,那对于formily的需求而言,其实就是:
需要一个单纯的batch模式,而非全部action,所以这么看来,action与batch的区别就不应该是高阶函数和非高阶函数的语义了,而应该是,batch与batch+untrack的语义区别,至于高阶和非高阶,那应该是action/batch都应该支持高阶绑定模式,
那么最终的API应该是这样:
显然,这样会带来break change,对用户的影响可能是,用户使用了action,但是希望内部收集依赖,升级后不会再收集,还有一个影响会比较大,直接使用action的用户需要改成action.bound
Beta Was this translation helpful? Give feedback.
All reactions