Lazysizes hydration missmatch

Hi, I'm trying to implement lazysizes in nuxt (because of the automatic size detection I know loading lazy has great browser support) but I get hydration errors.
I tried to import the lazysizes library with a plugin named '/plugins/lazysizes.client.ts' but I still get theses errors. Can someone explain me why this happens and show me how to do it right :D? This is what i tried:
// init on server
import lazySizes from 'lazysizes';

// this does run
console.log('running WRONGLY on server');
// init on server
import lazySizes from 'lazysizes';

// this does run
console.log('running WRONGLY on server');
I already found that issue https://github.com/nuxt/nuxt/issues/29056 and tried it with that code https://stackblitz.com/edit/github-xdvnbl?file=plugins%2Flazysizes.client.js,pages%2Fabout.vue,pages%2Findex.vue but that does not help. I use these versions:
"lazysizes": "^5.3.2",
"nuxt": "3.14.159",
"lazysizes": "^5.3.2",
"nuxt": "3.14.159",
GitHub
lazysizes.client.js running on server · Issue #29056 · nuxt/nuxt
Environment ------------------------------ - Operating System: Darwin - Node Version: v18.18.2 - Nuxt Version: 3.13.0 - CLI Version: 3.13.1 - Nitro Version: 2.9.7 - Package Manager: unknown - Build...
StackBlitz
Simonhrogers - Transition No Worky - StackBlitz
Run Transition No Worky created by Simonhrogers on StackBlitz
No description
2 Replies
kapa.ai
kapa.ai14h ago
Hi @Samuelreichoer. I'm kapa.ai, your friendly support bot. I will try to answer your question by searching through the knowledge base. :wave: ---------------------- Based on the information provided in the knowledge sources and your question, it appears you're encountering hydration mismatches when trying to implement lazysizes in your Nuxt 3 project. This is a common issue when dealing with client-side libraries in a server-side rendering (SSR) context. Let me explain why this happens and suggest a solution. The hydration mismatch occurs because lazysizes modifies the DOM on the client side, which can lead to differences between the server-rendered HTML and the client-side rendered HTML. This is especially problematic in Nuxt's universal rendering mode. To solve this issue, you need to ensure that lazysizes is only loaded and executed on the client side. Here's how you can do it correctly: 1. Create a client-side plugin for lazysizes:
// plugins/lazysizes.client.ts
import lazySizes from 'lazysizes';

export default defineNuxtPlugin(() => {
console.log('Lazysizes initialized on client');
// You can add any additional configuration for lazySizes here
});
// plugins/lazysizes.client.ts
import lazySizes from 'lazysizes';

export default defineNuxtPlugin(() => {
console.log('Lazysizes initialized on client');
// You can add any additional configuration for lazySizes here
});
2. Register the plugin in your nuxt.config.ts:
export default defineNuxtConfig({
plugins: ['~/plugins/lazysizes.client.ts'],
// ... other configurations
});
export default defineNuxtConfig({
plugins: ['~/plugins/lazysizes.client.ts'],
// ... other configurations
});
3. Use the client-only component to wrap your lazy-loaded images:
<template>
<client-only>
<img data-src="image.jpg" class="lazyload" alt="Lazy loaded image" />
</client-only>
</template>
<template>
<client-only>
<img data-src="image.jpg" class="lazyload" alt="Lazy loaded image" />
</client-only>
</template>
By using the client-only component, you ensure that the lazy-loaded images are only rendered on the client side, avoiding hydration mismatches. It's important to note that this approach means your images won't be server-rendered, which might affect SEO and initial page load appearance. If this is a concern, you might want to consider using Nuxt's built-in <nuxt-img> component, which provides lazy loading capabilities out of the box with better SSR support Nuxt Image (https://image.nuxt.com/). If you're still experiencing issues after implementing these changes, it might be related to other parts of your application or how you're using lazysizes. In that case, you may need to provide more details about your specific implementation or consider creating a minimal reproduction of the issue. Remember, when working with client-side libraries in Nuxt, it's crucial to ensure they're only loaded and executed on the client to avoid hydration mismatches Nuxt Docs: Rendering (https://nuxt.com/docs/guide/concepts/rendering#universal-rendering). ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ----------------------
kapa.ai
kapa.ai14h ago
<@1065266379382587422> Kapa.ai is still learning and improving, please let me know how I did by reacting below.
Want results from more Discord servers?
Add your server