hox icon indicating copy to clipboard operation
hox copied to clipboard

用户反馈:执行时机问题

Open brickspert opened this issue 6 years ago • 7 comments

看一下这个例子:https://codesandbox.io/s/hox-best-practice-w96lz 在 combinedInc 与 combinedDec 的区别只在于调用外部与外部的 setState 的顺序不同,却导致触发的 effect 次数不同(inc 1 次;dec 2 次,并其中一次是错误的),这影响就很大了。

brickspert avatar Oct 28 '19 12:10 brickspert

IMG_1094

正常情况下,是会有两次更新的。 只是 inc 情况下,两次更新被 react 合并到一次执行了。 并不会对真实数据产生任何影响。

brickspert avatar Oct 28 '19 13:10 brickspert

这是一个额外的心智负担,就一般的 React 经验都会认为在一次合成事件中两次 setState 会被 batchUpdate 并触发一次 effect,现在却不是这样。假设我们需要在 effect 中发送记录日志并发送,两次触发就有问题了。

zheeeng avatar Oct 28 '19 13:10 zheeeng

这是一个额外的心智负担,就一般的 React 经验都会认为在一次合成事件中两次 setState 会被 batchUpdate 并触发一次 effect,现在却不是这样。假设我们需要在 effect 中发送记录日志并发送,两次触发就有问题了。

我理解不管是 合并还是不合并,只要统一就可以。 全部搞成合并的好像不现实,react 机制限定了。 全部搞成不合并的,可能需要一个 setTimeout,也是很搓的办法。

我们再考虑下。

brickspert avatar Oct 28 '19 14:10 brickspert

是不是只有存在同时调用多次model的API才会导致重复渲染?

janryWang avatar Nov 15 '19 10:11 janryWang

https://codesandbox.io/s/hox-best-practice-49c3l 不会多次渲染的。

brickspert avatar Nov 15 '19 11:11 brickspert

感觉是多个root fiber合并更新优先级的问题 1.先触发本地state更新再触发其他root更新:不会合并更新 本地update优先级更高 2.先触发其他root更新 再触发本地state更新:会合并batchUpdate,还是因为本地state优先级更高

应该可以换成原生context和prodiver实现

3lang3 avatar Nov 25 '19 01:11 3lang3

现在好像解决了,甚至你这里例子的热更新多次触发useEffect的bug也解决了

xuxin666666 avatar May 31 '23 02:05 xuxin666666