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.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
感觉也是受了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