-
Notifications
You must be signed in to change notification settings - Fork 794
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
SSR with Vue.js when using slots: The client-side rendered virtual DOM tree is not matching server-rendered content #2905
Comments
We are also running into this issue for our use case. Have you found any workaround? I've tried playing with some of the |
@william-will-angi we tried as well, but no workaround at the moment. We either render some components client-side only, or migrate Stencil components to Vue.js to be able to use slots when SSR. |
Hey there, thank you for the patience, and thank you for reporting this. I'm curious if someone could put together a reproduction repo in Github? That would help us research this problem sooner than later. |
Oh, also, can you confirm for me if you're using the Vue bindings for the Stencil component? |
Hi @splitinfinities thank you for the reply! I have created a repro here: https://github.com/william-will-angi/nuxt-stencil-example You can repro by:
If you follow these steps, you will see something similar to the attached screenshot. I am not using the Vue bindings in this repro, however I did try in my downstream project and had the same results. |
@fdeneux @william-will-angi Did you find a solution to get this working with Nuxt/Stencil and could @splitinfinities you reproduce this issue? We (@feerglas) noticed the same behavior with our setup and have the same issue.
which uses Stencil Components created with
|
@4aficiona2 Unfortunately, we never found a solution |
@william-will-angi Hm, this is not what we hoped to hear ;) We noticed that the hydration in |
For us, this drawback was enough to have us put our stencil efforts on pause. Through my research, I did come across this github issue mentioning Edit: forgot the link to the issue |
hi @splitinfinities, just in case, i made a sample repo where i did use vue-server-renderer to render stencil generated web components in an express server. as far as i can tell, server-side hydration works as expected there. Is this probably an indication that the problem is not caused by failure from stencil and not from vue, but from nuxt? |
Thank you @feerglas, but your sample repo isn't really a Vue.js app, it doesn't mount a Vue.js instance on the front-end for re-hydration. My original issue was discovered on a Vue.js app, Nuxt.js just makes it easy to test with SSR. |
I've not looked into this issue, but I'm gonna guess it's something around how stencil renders it's pretend " In order to re-create slot behaviour, outside of shadowDom, stencil uses empty text nodes as placeholders for where the slot would normally be. With this, it maintains an unobtrusive anchor for where slotted content should go whilst maintaining a bunch of other meta about the slot too. My guess is, nuxt constructs a bunch of nodes using the server hydrated html which doesn't account for empty text nodes - so when the client renders some extra empty text nodes it decides there's a mis-match. I know nothing of nuxt, but if there was a way to make it more relaxed about empty text nodes then it should work. |
@fdeneux you are totally right, this example does not use client-side re-hydration. It was just to show to server-side hydration is not an issue. |
@fdeneux thanks for raising the issue and sorry for providing such a delayed response to it. We have been shipped a lot of bug fixes especially around SSR and slot management. Unfortunately I can't get any of the reproduction cases to work for me anymore. I will go ahead and close the issue hoping that it has been resolved since this h as been posted. That said, I am happy to take a look if this bug still exists and can be reproduced on a new example using latest Stencil. Thank you! |
Stencil version:
I'm submitting a:
[x] bug report
[ ] feature request
[ ] support request
Current behavior:
Putting content in the Stencil component's slot in Vue.js throws an error on hydrate.
Expected behavior:
The client-side rendered virtual DOM tree should match the server-rendered content.
Steps to reproduce:
<slot />
.Related code:
Stencil component
Vue.js component
Nuxt.js module to hydrate Stencil components
Other information:
Possible cause might be Stencil updating HTML comments on hydrate.
The text was updated successfully, but these errors were encountered: