---
title: "Questions fréquentes"
headingIds:
  [
    "faq",
    "what-is-vincle-and-when-should-i-use-it",
    "how-is-vincle-different-from-react",
    "can-i-use-vincle-with-react-components",
    "what-runtimes-does-vincle-support",
    "how-do-i-handle-async-data-fetching",
    "how-does-security-work-in-vincle",
    "can-i-use-vincle-for-streaming-html",
    "can-i-catch-rendering-errors-without-crashing-the-whole-page",
    "how-do-i-debug-rendering-issues",
    "what-is-the-bundle-size",
    "where-can-i-get-help",
  ]
---

# Questions fréquentes

Les réponses aux questions courantes sur le rendu serveur, la sécurité et les intégrations.

## Qu’est-ce que Vincle et quand l’utiliser ?

Vincle transforme des composants JSX en HTML. Il convient aux vues serveur, aux pages statiques et aux réponses progressives lorsque vous souhaitez conserver votre application et votre routeur.

## Quelles différences avec React ?

Vincle ne fournit pas de runtime de réconciliation client, de hooks ou d’hydratation. Les composants sont des fonctions serveur et le résultat est du HTML.

## Puis-je utiliser des composants React ?

Les composants React qui dépendent des hooks ou du runtime React ne sont pas directement compatibles. Les fonctions de présentation simples peuvent être portées en adaptant leur runtime et leurs types.

## Quels environnements sont pris en charge ?

Core prend en charge Bun, Node.js et Deno ainsi que les environnements compatibles. Vérifiez les capacités d’AsyncLocalStorage pour l’isolation des contextes et les dépendances de chaque intégration.

## Comment charger des données de manière asynchrone ?

Utilisez des composants `async`. Le moteur les attend dans l’ordre du document. Préparez vos promesses avant le rendu pour démarrer plusieurs chargements ensemble, ou utilisez `<Defer>` pour des régions progressives.

```tsx
async function Page({ id }: { id: string }) {
  const user = await db.users.find(id);
  const posts = await db.posts.findByUser(id);
  return (
    <html>
      <body>
        <h1>{user.name}</h1>
        {posts.map((post) => (
          <Post key={post.id} {...post} />
        ))}
      </body>
    </html>
  );
}

const html = await renderToString(<Page id="42" />);
```

## Comment fonctionne la sécurité ?

Le contenu et les attributs sont échappés ; les URL passent par un filtre de schémas. `raw()` et `rawUrl()` sont des échappatoires explicites. La validation applicative, la CSP et l’assainissement du HTML restent nécessaires.

## Puis-je diffuser le HTML en streaming ?

Oui, avec `@vincle/flow`. Les adaptateurs définissent le format des fragments pour le polyfill natif, Turbo, HTMX ou d’autres mécanismes.

## Puis-je traiter une erreur sans interrompre toute la page ?

`onError` permet de remplacer le contenu d’un fragment qui échoue. Une erreur dans la structure initiale doit être traitée au niveau de la réponse globale.

```tsx
serve(req, () => <Page />, NativeAdapter, {
  onError: (error, { id }) => {
    console.error(`Fragment ${id} failed:`, error);
    return <p>This section failed to load.</p>;
  },
});
```

## Comment déboguer un problème de rendu ?

Les erreurs portent des codes stables et des messages contextualisés. Inspectez le résultat HTML, réduisez le composant concerné et utilisez les tests du rendu pour reproduire le problème.

## Quelle est la taille du package ?

Core n’a aucune dépendance d’exécution et aucun runtime client. La taille téléchargée dépend des types et des points d’entrée utilisés ; les scripts de taille du dépôt fournissent des mesures reproductibles.

## Où trouver de l’aide ?

Consultez la [documentation d’API](/fr/api/core/renderToString) et les [issues du dépôt](https://github.com/cjean-fr/vincle/issues).

<script type="application/ld+json">
  {JSON.stringify({
    "@context": "https://schema.org",
    "@type": "FAQPage",
    inLanguage: "fr",
    mainEntity: [
      {
        "@type": "Question",
        name: 'Qu’est-ce que Vincle et quand l’utiliser ?\n\nVincle transforme des composants JSX en HTML. Il convient aux vues serveur, aux pages statiques et aux réponses progressives lorsque vous souhaitez conserver votre application et votre routeur.\n\n## Quelles différences avec React ?\n\nVincle ne fournit pas de runtime de réconciliation client, de hooks ou d’hydratation. Les composants sont des fonctions serveur et le résultat est du HTML.\n\n## Puis-je utiliser des composants React ?\n\nLes composants React qui dépendent des hooks ou du runtime React ne sont pas directement compatibles. Les fonctions de présentation simples peuvent être portées en adaptant leur runtime et leurs types.\n\n## Quels environnements sont pris en charge ?\n\nCore prend en charge Bun, Node.js et Deno ainsi que les environnements compatibles. Vérifiez les capacités d’AsyncLocalStorage pour l’isolation des contextes et les dépendances de chaque intégration.\n\n## Comment charger des données de manière asynchrone ?\n\nUtilisez des composants `async`. Le moteur les attend dans l’ordre du document. Préparez vos promesses avant le rendu pour démarrer plusieurs chargements ensemble, ou utilisez `<Defer>` pour des régions progressives.\n\n```tsx\nasync function Page({ id }: { id: string }) {\n  const user = await db.users.find(id);\n  const posts = await db.posts.findByUser(id);\n  return (\n    <html>\n      <body>\n        <h1>{user.name}</h1>\n        {posts.map((post) => (\n          <Post key={post.id} {...post} />\n        ))}\n      </body>\n    </html>\n  );\n}\n\nconst html = await renderToString(<Page id="42" />);\n```\n\n## Comment fonctionne la sécurité ?\n\nLe contenu et les attributs sont échappés ; les URL passent par un filtre de schémas. `raw()` et `rawUrl()` sont des échappatoires explicites. La validation applicative, la CSP et l’assainissement du HTML restent nécessaires.\n\n## Puis-je diffuser le HTML en streaming ?\n\nOui, avec `@vincle/flow`. Les adaptateurs définissent le format des fragments pour le polyfill natif, Turbo, HTMX ou d’autres mécanismes.\n\n## Puis-je traiter une erreur sans interrompre toute la page ?\n\n`onError` permet de remplacer le contenu d’un fragment qui échoue. Une erreur dans la structure initiale doit être traitée au niveau de la réponse globale.\n\n```tsx\nserve(req, () => <Page />, NativeAdapter, {\n  onError: (error, { id }) => {\n    console.error(`Fragment ${id} failed:`, error);\n    return <p>This section failed to load.</p>;\n  },\n});\n```\n\n## Comment déboguer un problème de rendu ?\n\nLes erreurs portent des codes stables et des messages contextualisés. Inspectez le résultat HTML, réduisez le composant concerné et utilisez les tests du rendu pour reproduire le problème.\n\n## Quelle est la taille du package ?\n\nCore n’a aucune dépendance d’exécution et aucun runtime client. La taille téléchargée dépend des types et des points d’entrée utilisés ; les scripts de taille du dépôt fournissent des mesures reproductibles.\n\n## Où trouver de l’aide ?',
        acceptedAnswer: {
          "@type": "Answer",
          text: "Consultez la documentation d’API et les issues du dépôt.",
        },
      },
    ],
  })}
</script>
