-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
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
[Bug Report] reactiveField toJS函数会deep clone对象,导致组件watch effect重复执行 #4097
Comments
Reproduction link 显示 devBox not found, 看看链接是不是有问题? |
看标题描述应该与 #2794 这个问题相关。 可以通过 |
原链接是私有的,现在开放了 |
对但vue的响应式系统下,props的引用地址变更也会触发watch effect。react我理解useEffect的dep也是简单的shallow diff。我觉得props地址是不能变更的,虽然两个对象打印后是一样。 源码是在packages/vue/src/components/ReactiveField.ts
|
是的, vue是自带响应式的。 出现这个问题的原因是当前版本的 formily 在设计的时候,将响应式放在@formily/reactive 这一层了,没有利用 vue自身的能力。 目前 @formily/vue 中的 |
后续这个问题会修复吗?我这边可以先规避下 |
同问后续这个问题会修复吗? |
Reproduction link
!sandbox
Steps to reproduce
如link中的源码。
组件在watch中触发emit,导致parent渲染的reactiveField重新渲染,并构造了一个新的props。
再次渲染子组件的过程中,导致了watch effect函数重复执行。
What is expected?
watch函数只触发一次。
What is actually happening?
watch函数触发了n次
Package
@formily/[email protected]
The text was updated successfully, but these errors were encountered: