renderToStatic
Construit un document HTML statique et, si nécessaire, des fichiers de fragments différés.
Signature#
renderToStatic(fn, options?) fournit le HTML de la page et la méthode d’émission des fragments lorsque des options de fragments sont configurées.
import { renderToStatic } from "@vincle/flow";
// Pure static: no adapter, no emitFragmentsfunction renderToStatic<T>(fn: (ctx: PureStaticContext) => T): Promise<T>;
// With deferred fragments: adapter requiredfunction renderToStatic<T>(fn: (ctx: StaticContext) => T, options: StaticOptions): Promise<T>;Options#
Sans options, le rendu est purement statique. Pour des fragments séparés, fournissez adapter et generatePath(id) ; écrivez ensuite chaque résultat à l’emplacement correspondant.
| Option | Type | Valeur par défaut | Description |
|---|---|---|---|
adapter |
Adapter |
Obligatoire | Adaptateur de représentation des fragments |
generatePath |
(id: string) => string |
(id) => `/fragments/${id}.html` |
Chemin d’URL de chaque fragment |
Contextes#
La page et les fragments partagent les contextes de rendu nécessaires. Les ressources Style et Script appartiennent à la structure initiale.
| Méthode | Signature | Description |
|---|---|---|
renderPage |
(node: () => JSX.Element) => Promise<string> |
Rend la page en chaîne HTML complète |
emitFragments |
(emit: (id: string, url: string, html: string) => void | Promise<void>) => Promise<void> |
Produit les fragments et appelle le callback pour chacun |
Utilisation#
Écrivez le document, puis appelez emitFragments pour produire les fichiers des fragments. Chaque fichier contient la représentation attendue par l’adaptateur.
import type { JSX } from "@vincle/core";
import { renderToStatic } from "@vincle/flow";import { NativeAdapter } from "@vincle/flow/adapters";import { writeFile } from "node:fs/promises";
declare const pages: { Component: () => JSX.Element; out: string }[];
await renderToStatic( async (ctx) => { for (const page of pages) { const html = await ctx.renderPage(() => <page.Component />); await writeFile(page.out, "<!DOCTYPE html>\n" + html); }
// One .html file per deferred fragment, already Frame-wrapped. await ctx.emitFragments((_id, url, html) => writeFile("./dist" + url, html)); }, { adapter: NativeAdapter },);