Creation:2026-01-20Last update:2026-03-24

    Zawartość HTML / HTML w Intlayer

    Intlayer obsługuje zawartość HTML, umożliwiając osadzanie bogatej, strukturalnej treści w Twoich słownikach. Ta zawartość może być renderowana za pomocą standardowych tagów HTML lub zastępowana niestandardowymi komponentami w czasie wykonywania.

    Deklarowanie treści HTML

    Możesz zadeklarować treść HTML, używając funkcji html lub po prostu jako łańcuch znaków.

    Użyj funkcji html, aby jawnie zadeklarować zawartość HTML. Zapewnia to poprawne odwzorowanie standardowych tagów, nawet jeśli automatyczne wykrywanie jest wyłączone.

    htmlDictionary.content.ts
    import { html, type Dictionary } from "intlayer";const htmlDictionary = {  key: "app",  contentAutoTransformation: true, // można ustawić w pliku konfiguracyjnym  content: {    myHtmlContent:  html("<p>Witaj <strong>świecie</strong></p>"),  },} satisfies Dictionary;export default htmlDictionary;

    Węzeł html()

    Funkcja html() to nowa funkcja w Intlayer v8, która pozwala na jawne definiowanie treści HTML w słownikach. Chociaż Intlayer często potrafi automatycznie wykryć treść HTML, użycie funkcji html() zapewnia kilka korzyści:

    • Bezpieczeństwo typów: Funkcja html() pozwala zdefiniować oczekiwane właściwości (props) dla niestandardowych komponentów, co zapewnia lepsze autouzupełnianie i sprawdzanie typów w edytorze.
    • Jawna deklaracja: Gwarantuje, że ciąg znaków będzie zawsze traktowany jako HTML, nawet jeśli nie zawiera standardowych tagów HTML, które wyzwoliłyby automatyczne wykrywanie.
    • Definiowanie niestandardowych komponentów: Możesz przekazać drugi argument do html(), aby zdefiniować niestandardowe komponenty i ich oczekiwane typy właściwości.
    typescript
    import { html } from "intlayer";const myContent = html(  "<MyCustomComponent title='Witaj'>Świecie</MyCustomComponent>",  {    MyCustomComponent: {      title: "string",      children: "node",    },  });

    Podczas korzystania z metody .use() na węźle HTML, dostarczone komponenty zostaną sprawdzone pod kątem definicji podanej w funkcji html() (jeśli jest dostępna).


    Renderowanie HTML

    Renderowaniem można zająć się automatycznie za pomocą systemu treści Intlayer lub ręcznie przy użyciu specjalistycznych narzędzi.

    Automatyczne renderowanie (z użyciem useIntlayer)

    Kiedy uzyskujesz dostęp do treści za pomocą useIntlayer, węzły HTML są już przygotowane do renderowania.

    Węzły HTML można renderować bezpośrednio jako JSX. Standardowe tagi działają automatycznie.

    App.tsx
    import { useIntlayer } from "react-intlayer";const AppContent = () => {  const { myHtmlContent } = useIntlayer("app");  return <div>{myHtmlContent}</div>;};

    Użyj metody .use(), aby dostarczyć własne komponenty lub nadpisać tagi:

    tsx
    {myHtmlContent.use({  p: (props) => <p className="prose" {...props} />,  CustomLink: ({ children }) => <a href="/details">{children}</a>,})}

    Konfiguracja globalna z HTMLProvider

    Możesz skonfigurować renderowanie HTML globalnie dla całej aplikacji. To idealne rozwiązanie do zdefiniowania niestandardowych komponentów, które powinny być dostępne we wszystkich treściach HTML.

    AppProvider.tsx
    import { HTMLProvider } from "react-intlayer/html";export const AppProvider = ({ children }) => (  <HTMLProvider    components={{      p: (props) => <p className="prose" {...props} />,      CustomLink: ({ children }) => <a href="/details">{children}</a>,    }}  >    {children}  </HTMLProvider>);

    Możesz również użyć własnego silnika renderującego HTML:

    AppProvider.tsx
    import { HTMLProvider } from "react-intlayer/html";export const AppProvider = ({ children }) => (  <HTMLProvider    renderHTML={async (html) => {      const { renderHTML } = await import('react-intlayer/html');      return renderHTML(html);    }}  >    {children}  </HTMLProvider>);
    Dynamiczne importowanie silnika renderującego HTML to dobry sposób na zmniejszenie rozmiaru paczki (bundle) Twojej aplikacji.

    Ręczne renderowanie i zaawansowane narzędzia

    Jeśli musisz renderować surowe łańcuchy HTML lub potrzebujesz większej kontroli nad mapowaniem komponentów, użyj poniższych narzędzi.

    Komponent <HTMLRenderer />

    Renderuj łańcuch HTML przy użyciu określonych komponentów.

    tsx
    import { HTMLRenderer } from "react-intlayer/html";<HTMLRenderer components={{ p: MyCustomP }}>  {"<p>Hello World</p>"}</HTMLRenderer>

    Hook useHTMLRenderer()

    Uzyskaj wstępnie skonfigurowaną funkcję renderującą.

    tsx
    import { useHTMLRenderer } from "react-intlayer/html";const renderHTML = useHTMLRenderer({  components: { strong: (props) => <strong {...props} className="text-red-500" /> }});return renderHTML("<p>Witaj <strong>świecie</strong></p>");

    Narzędzie renderHTML()

    Samodzielne narzędzie do renderowania poza komponentami.

    tsx
    import { renderHTML } from "react-intlayer/html";const jsx = renderHTML("<p>Hello</p>", { components: { p: 'div' } });

    Referencja opcji

    Te opcje mogą być przekazane do HTMLProvider, HTMLRenderer, useHTMLRenderer i renderHTML.

    Opcja Typ Domyślnie Opis
    components Record<string, any> {} Mapa tagów HTML lub niestandardowych nazw komponentów do odpowiadających im komponentów.
    renderHTML Function null Funkcja renderująca, która całkowicie zastąpi domyślny parser HTML (tylko dla providerów Vue/Svelte).
    Uwaga: Dla React i Preact standardowe tagi HTML są dostarczane automatycznie. Prop components trzeba przekazać tylko wtedy, gdy chcesz je nadpisać lub dodać niestandardowe komponenty.