vuejs / core

🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
https://vuejs.org/
MIT License
47.61k stars 8.32k forks source link

Crash on 'update' non-resolved async component #10017

Closed mmis1000 closed 10 months ago

mmis1000 commented 10 months ago

Vue version

3.4.5

Link to minimal reproduction

https://play.vuejs.org/#eNqVVVtv2jAU/itHeUmQIGnX7YVBVTb1YdNuWrunZQ8ZOYCbxI5sB1oh/vuO7TgkpVs7iaqc+3cun9kHi7qOtw0G02CmlpLVGhTqpr5MOatqITW8F1UNKykqCOPECMY97Mx7uGlUjVzhGCSu4ND6OqeULwVXGgp8gLmxR2ERjrw2z3Tm1eb70SL4j5o0SNZoBPNL2KccIElAb5gia/kAm6ymsjlkK40SGGeaZSWoFgwlVaLcYhumBOwQdhnT0HDNSsqDBA6ArSAicPE2KxuqNp9DWJyHI1cPLEJvA4vxFXUFcEg5fTzWTyLLMX8aK32oFlSC6pIPbpFTyAoy9cCXsKR5Ck4qHyLZeo2S8bXxsQkqzLjJkdFmfHOkbvvLTWCvAQvfgpslbp+0SRI0VnVJAyUJYOZXZiWS7Y6nxTwNKFUawNR0SpL5R+JVaRskhe/VKO3g3ZqsxX0lS+KKJL0qs6QDEIwDrWhyK7aO75TgdHl2YGlghsFKlF9rzWiyaTD1a0iDrCzF7qPVadng2OuXG1wWT+jv1L3RpcE3GhRKOoSgs+lMrlE78/XNF7yn752xEnlTkvc/jN/N6BuD0bm9a3hOsHt+Fu0HSxBa5a26vtc0CN+UAWqPyPqnAVHFLOBvrR/hXsQX/vhoip6Lp9SVPXb6veQDZr7t+SzMJQ5Y3mnOHdfJ1/y5c6+lqBUdWo4rxvGbkaK9MRu0xRRu6Ib5euw15oQGysNomA8rIqVPd02Cin6G7uDCMYS9Kwt/daFdV5GnXFvOZIsGQTbmWPRIC684UqPNMTtOZEp8oOO2PccF3XaPC66yK9jiHXnuTFoCucCWRpZgfQ0RxSLqc2M4++d2+7l9Vk52+7/7Gg4psy8lxx2Qf8UURtL0ShBuWYWi0ZEcw/nZ2dnIhjy/yP7mWsxPb64bZIfnJQvL2fZysVjAfl8cDrPEiKeTdWObVFn96N1xhiHpaJCO3ButazVNkmXOKSzHkm1lzFEnvK6SK3JLpPlFqXCSi+rqIn4dv6H6SvfVMapq8luKHb1ElKT3UJh4+zzJiaQfM5TmGXlZ2Udh/dKPTCflu0fk8AeG+bnk

Steps to reproduce

  1. Open the playground

What is expected?

The text is AAA data2, and there is no error message.

What is actually happening?

The text is AAA data, and an error is shown.

System Info

No response

Any additional comments?

It used to work in preview of pr #7290 .

The playground of the commit shows the result correctly.

Probably it is also regressed by this commit

yyx990803 commented 10 months ago

A note on why we can't just do initialVNode.el = placeholder.el:

In component's render effect on initial mount, we use the presence of el to serve as a check for adopted server-rendered DOM. If el is present, it will perform hydration instead of client mount. This is why the previous fix broke Nuxt in ecosystem-ci.