Limitez les parties de l’interface qui nécessitent le client.
Les paquets Liquidify utilisent ESM. Les contrôles interactifs et les fournisseurs de matériaux sont des composants clients. Les pages, le chargement des données et les layouts peuvent rester sur le serveur.
Dans Next.js, ajoutez la directive client au plus petit module qui gère l’interaction :
// app/account/save-button.tsx
"use client"
import { Button } from "@liquidify/react"
export function SaveButton() {
return <Button onPress={() => console.log("save")}>Enregistrer</Button>
}Un composant serveur peut afficher ce composant et lui transmettre des données sérialisables. Ne transmettez pas de callbacks, de nœuds DOM ni d’autres valeurs non sérialisables.
Importez @liquidify/react/styles.css dans l’entrée globale des styles ou le layout racine. Gardez les mêmes valeurs contrôlées initiales dans les deux environnements. Placez la logique du navigateur dans des effets ou événements, pas lors de l’évaluation du module.
Sheet, Dialog, Alert, ActionSheet, Popover, Tooltip, Menu et ContextMenu utilisent un portail vers document.body pour leur contenu flottant. Ils le montent uniquement lorsqu’ils sont ouverts et ne produisent pas ce contenu sur le serveur.
Un contrôle initialement fermé produit la même structure initiale sur le serveur et le client. Utilisez un état open déterministe ou laissez le composant le gérer. Ne lisez pas window ni document lors de l’évaluation du module.
Les identifiants internes utilisent useId de React pour stabiliser les associations entre libellés et attributs ARIA.