Lewati ke konten

Nuxt 3

Nuxt 3 merender halaman di server secara default. Skrip CDN dan elemen kustom harus dimuat hanya di sisi klien. Plugin klien Nuxt adalah tempat paling bersih untuk melakukan ini.

Terminal window
npm install @wink/elements

Suffix .client.ts memberi tahu Nuxt untuk menjalankan plugin ini hanya di browser:

plugins/wink.client.ts
import { load } from '@wink/elements';
export default defineNuxtPlugin(() => {
load({ clientId: useRuntimeConfig().public.winkClientId });
});
nuxt.config.ts
export default defineNuxtConfig({
runtimeConfig: {
public: {
winkClientId: process.env.NUXT_PUBLIC_WINK_CLIENT_ID,
},
},
});

Tambahkan ke .env:

NUXT_PUBLIC_WINK_CLIENT_ID=your-client-id

Tambahkan opsi compiler isCustomElement agar Vue tidak memperingatkan tentang tag <wink-*> yang tidak dikenal:

nuxt.config.ts
export default defineNuxtConfig({
vue: {
compilerOptions: {
isCustomElement: (tag) => tag.startsWith('wink-'),
},
},
runtimeConfig: {
public: {
winkClientId: process.env.NUXT_PUBLIC_WINK_CLIENT_ID,
},
},
});

Bungkus komponen Wink dengan <ClientOnly> untuk mencegah ketidaksesuaian hidrasi SSR:

<template>
<main>
<ClientOnly>
<wink-content-loader layout="HOTEL" :id="layoutId" />
</ClientOnly>
</main>
</template>
<script setup lang="ts">
const layoutId = 'YOUR_LAYOUT_ID';
</script>

Perluas HTMLElementTagNameMap global (sama seperti Vue 3) untuk mendapatkan autocompletion atribut. Lihat halaman integrasi Vue 3 untuk file deklarasi lengkap.