-
-
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
Suspense+KeepAlive+AsyncComponent+v-if causes the Uncaught (in promise): Cannot read properties of null (reading 'parentNode')
#6463
Comments
Same error, what's the progress? |
The reproduction throws the same error on vue |
I had the same issue inside a Nuxt v3.2.2 app, probably caused by a suspense boundary with async components. In the following line core/packages/runtime-core/src/renderer.ts Line 1496 in a0e7dc3
I think it is some kind of race condition, where the |
Same issue for me with Nuxt 3.1.1. Changing line 35 of @vue/runtime-dom |
Same issue here. |
Same issue on my side :( |
Here is another reproduction that does not seemingly make use of KeepAlive but still triggers this error. The code is nonsensical from the practical aspect as it hides the element when it loads the fallback component. Despite this, it is hard for me to assess whether the code itself is valid and belongs to the same type of issue. |
Is this implemented in Nuxt? Maybe @danielroe might be interested for nuxt/nuxt#13309 |
Nuxt 3.7.3 Detailed reproduction: |
I have same issue, so only this answer helped me. Hope it will be fixed soon
|
Had the same problem in nuxt 3.8.0. Finally solved by patching in this way! Thank you, i hope can be helpful for the fix |
this is serious issue - is it on the roadmap? |
The problem is here: core/packages/runtime-core/src/components/Suspense.ts Lines 211 to 244 in 3be4e3c
When the component is toggled before the pending tree is resolved, patching should not be performed. Instead, the logic under the "else" statement should be executed. based on the current code, the component should be used as the root node of Suspense and should not be wrapped by any other elements. The correct nesting order should be as follows: <KeepAlive>
<Suspense>
<!-- main content -->
<component :is="Component"></component>
<!-- loading state -->
<template #fallback>
Loading...
</template>
</Suspense>
</KeepAlive> see https://vuejs.org/guide/built-ins/suspense.html#combining-with-other-components or add a key see <Suspense>
<div :key="+isShown">
<KeepAlive>
<CmpAsync v-if="isShown" />
</KeepAlive>
</div>
</Suspense> this will be fixed via #7290 |
duplicate of #6095 |
Vue version
3.2.37
Link to minimal reproduction
https://play.vuejs.org/#eNqNVMtu2zAQ/JWFLpGBWEyRnlLZiBvk0BZtg9pHXRRpZTGVSIKk/EDgf++SlGzVToCcLHJfM7NDv0YLpZJNh9FdlFpsVZNbnGcCIF12RqEw4UTnkm/6Tzr8QFSLhm+GqL98aNXC7EUBmymvZlnEzbKWW5FFwE6V7Lw0ZUPnlI1mpmwEJzWF5sqCQdspn8tbJbWF19CjxIoL9MMfJEUECnsdQlL8lJ2wWPZnjZX/OkClZQtXxP3qy6gjkegjCXO9nDguwaUUUhifEWjO3pwbhznxBGZzELiFJ+rGDcaxRuMve9Dg6Kx4i7KzcUinjJjaT67h083NzcTjIqgT9+tOJxC9toSBCMVWdzjEj4T7nv20i1lHFIwBr1z82NRKcB3B1igAN6j3tuZiDVveNPCM4EiPqqWGzqDf/xw4ocO8BFmdDHHcfj8g2eQNtZ9BlTcGB5aedOB8cD8pC1ufR9dRWM60zVXyYqQgt3r45DEfMFl0NxDKItqYO2dRba0yd4wVpaCyEsl1OhFomVAtu6c0pkkpUmVayvb+NrlNPpMZjR1fJ2ja6bOWW4OammRR7yM/htElyTPVKErUqD869qxsPPosdDHey5OJA4ky2PPy7Z7e6qrmBizu6O3UsmtKciS1d0ukaVSxxzI8vVAyenU0wBoyW8XXZ5oXNJc3qH8ry8mM/2mfN43cfvd3zkJHsYoai79v3L+YXRDtibzvqI8Etrleow3hx+UvIjEKtrLsmn7P7wT/oJFN5zCGtK+dKAn2KM+j/eYtRP5emcedpb+fgZQD6uX2+X7hTvL3qJ/g0jqPazr8AxfWwHU=
Steps to reproduce
The reproduction link demonstrates the issue with no action required.
<KeepAlive>
.<Suspense>
somewhere up in the tree.v-if
. The initial condition should be set totrue
.false
before the async component is fully loaded.What is expected?
The async component is loaded but not rendered.
No errors in the logs.
What is actually happening?
Notes
Another issue here is
Uncaught (in promise): suspense.resolve() is called without a pending branch.
error that is thrown if there is no KeepAlive component in the tree. This error is caused by double calling the "resolve" method of the samesuspense
object when an async component is unmounted before the resolution of the suspense.core/packages/runtime-core/src/renderer.ts
Lines 2274 to 2290 in 3be4e3c
core/packages/runtime-core/src/components/Suspense.ts
Lines 224 to 226 in 3be4e3c
You can put an async component into a wrapper component (it can just render the default slot). In that case neither KeepAlive or Suspense is rerendered. Although this makes KeepAlive useless.
https://play.vuejs.org/#eNqNVE1P4zAQ/Suj7GFTicZ0uye2rWARh/1GC8dcQjIhhsS2bKcFof73HdtJmhSQ9pSM5/O9efZLdKFUsm0xOotWFhtVZxY3qQBY3bRGoTDBIrvg2+6XjB+I6qLm297rDy8btRjZ4eTCPIsctnNertOIm5tK7kQaARsnsknmih1XX7FD82FK+FBmdX2X5Y9D5k+ZFVzcJ0nS500hsRGmiW9lcs2VBYO2VT6WN0pqCy+hUIElF+ihXEryCBT2JLik+CVbYbHobI2l/9tDqWUDH4nbj19GFQlq50mYq+XIPw5YTCIWfYgLyqUwPibwun5ztDiMEs9gvQGBO7imctxgHGs0/rDDBQ7xLW9QtjYO4RQRU/nZCSxOT09nfjJCM3NfZx2G6JZJMxDm2OoWe//ASVez6/aq1zAFY8BL5x+KWgmuItgKBeAW9bOtaLWw43UNdwgO9ChbamgNesFtgNN0mBUgy4MCB410DZJtVlP5NZCIDPYoPeiAee8+KxaEsYlOorCeeZOp5MFIQRfGj0+i9g6TRmc9oDSijTk7jSprlTljLC8EpRVIqtaJQMuEatg5hTFNTBEr80I258vkU7L8TGo3dnyeoGnmd1ruDGqqkkad1nwfRofEz1yjKFCj/t++R2mT3ke+V/09QanYEy29hl8/IIc7e1txAxaf6IJVsq0L0iSVd2ukbpTxjEW4nyFldDWpgTUkt5LfH7GeU19eo/6jLCc5Ttind0HuvvszJ6KBrbzC/PGN8wfzFFi7JvU76COGbabv0Qb31c1vAjFyNrJo627T7zj/opF162YMYV9bUdDYozg/7TcvIlL4rbl6svRG9aDcoJ5uH+837ih/D/ph3GWyPFqTf0ime9Ked1NL615kssbc7/8Bq7z4Vg==
The text was updated successfully, but these errors were encountered: