Aller au contenu

Next.js

Les composants Wink sont des éléments personnalisés uniquement pour le navigateur — les scripts CDN doivent être chargés côté client. Les modèles ci-dessous couvrent à la fois le App Router (Next.js 13+) et l’ancien Pages Router.

Fenêtre de terminal
npm install @wink/elements

Créez un composant client qui appelle load() une fois et rendez-le dans votre layout racine :

components/WinkLoader.tsx
'use client';
import { useEffect } from 'react';
import { load } from '@wink/elements';
export function WinkLoader() {
useEffect(() => {
load({ clientId: process.env.NEXT_PUBLIC_WINK_CLIENT_ID! });
}, []);
return null;
}
app/layout.tsx
import { WinkLoader } from '@/components/WinkLoader';
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<body>
<WinkLoader />
{children}
</body>
</html>
);
}

Utilisez les composants Wink dans n’importe quel Client Component :

app/hotels/page.tsx
'use client';
export default function HotelsPage() {
return (
<main>
<wink-content-loader layout="HOTEL" id="YOUR_LAYOUT_ID" />
</main>
);
}

Chargez une fois dans _app.tsx :

pages/_app.tsx
import type { AppProps } from 'next/app';
import { useEffect } from 'react';
import { load } from '@wink/elements';
export default function App({ Component, pageProps }: AppProps) {
useEffect(() => {
load({ clientId: process.env.NEXT_PUBLIC_WINK_CLIENT_ID! });
}, []);
return <Component {...pageProps} />;
}

Puis utilisez les composants Wink dans n’importe quelle page :

pages/hotels.tsx
export default function HotelsPage() {
return <wink-content-loader layout="HOTEL" id="YOUR_LAYOUT_ID" />;
}

Ajoutez dans .env.local :

NEXT_PUBLIC_WINK_CLIENT_ID=your-client-id

Le préfixe NEXT_PUBLIC_ est requis pour exposer la variable au bundle du navigateur.

Ajoutez un fichier de déclaration pour que TypeScript reconnaisse les noms des éléments personnalisés dans JSX — voir la page d’intégration React pour le snippet complet wink-elements.d.ts.