-
-
Notifications
You must be signed in to change notification settings - Fork 8.3k
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
Vue infinite loop detection should throw a real error in dev, not just log a warning to console #7437
Comments
+++ watch(() => state.value.deep, () => {
--- watch(() => [state.value.deep], () => { or check the new value and old value yourself It will avoid recursive updates. |
The behaviors of dev and prod are expected since Vue emitted a warning when dev mode. The developers should fix this. core/packages/runtime-core/src/scheduler.ts Lines 262 to 277 in 76b8573
|
i am not interested in how to fix this code; if i write the logic, data update will not appera in watch cb but in event cb. |
I think it is an intentionally optimized behavior of Vue. There are some small differences in behavior between production and development modes, but they are aimed to improve the developing experience. In this case, the browser will be stuck by infinite looping. So that's why Vue will stop it and emit a warning in dev mode. Relate PR: #456 If you insist that the behavior can be improved or removed, I'm also happy to reopen the issue for a more in-depth discussion. /cc @LinusBorg @yyx990803 |
@sxzz tks |
So it's a compromise to get both better dev experience and better prod performance. What specific problem does the current behavior pose for you that would be worth giving that up? Both will effectively stop the app and throw an error? |
@LinusBorg problem is same wrong code, vue "work" in dev mode but not in prod mode. may be vue team can consider thrown error in dev mode too? |
Actually, warnings are not to be ignored in Vue. |
@sxzz i know vue team has warning me/us in console to friendly reminder me modify my code, but catch an error then change it to a warn is not a good practice, right? it make wrong code "work". |
@Inori-Lover 🤔 Hmmm it makes sense. I think we should change the warning to an error too and it's a serious error to be fixed by developers. |
Agreed. |
do we need a pr? |
Sure, if you would like |
so, maybe we need to replace the 'warn' with throwing an error? But I want to know how to test changes in prod mode? Since the SFC also running in dev mode |
@smallnine9 @sxzz Why was this PR closed without comment? I think this is a much needed feature and should be merged soon. |
same here @yyx990803 |
@yyx990803 @smallnine9 @sxzz |
Resolved in #7447 |
Thanks for the tremendously fast response. |
Vue version
3.2.45
Link to minimal reproduction
github repo
Steps to reproduce
pnpm dev && pnpm preview
, click button againWhat is expected?
both dev and prod mode should work in same way; or the code did not cause recursively update
What is actually happening?
in dev mode, recursive update will stop auto;
in prod mode, it just continue run
System Info
Any additional comments?
sfc.vuejs.org even in PROD mode, it still use dev vue file so i upload a github repo.
the key code
====
english is not my first lang, so i write a chinese version desc here too.
复现:
pnpm dev && pnpm preview
, 再次点击button期望:
dev与prod mode两边的行为一致,或者这段代码根本不会产生死循环更新
实际:
dev会在安全范围内停掉这个watch
prod则会跑到死
The text was updated successfully, but these errors were encountered: