Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

用户反馈:执行时机问题 #7

Open
brickspert opened this issue Oct 28, 2019 · 7 comments
Open

用户反馈:执行时机问题 #7

brickspert opened this issue Oct 28, 2019 · 7 comments

Comments

@brickspert
Copy link
Member

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

@brickspert
Copy link
Member Author

IMG_1094

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

@zheeeng
Copy link

zheeeng commented Oct 28, 2019

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

@brickspert brickspert reopened this Oct 28, 2019
@brickspert
Copy link
Member Author

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

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

我们再考虑下。

@janryWang
Copy link

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

@brickspert
Copy link
Member Author

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

@3lang3
Copy link

3lang3 commented Nov 25, 2019

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

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

@xuxin666666
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants