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

    HTML-контент / HTML в Intlayer

    Intlayer поддерживает HTML-контент, позволяя встраивать насыщенный, структурированный контент в ваши словари. Этот контент может отображаться с помощью стандартных HTML-тегов или заменяться на пользовательские компоненты во время выполнения.

    Объявление HTML-контента

    Вы можете объявлять HTML-контент с помощью функции html или просто как строку.

    Используйте функцию html, чтобы явно объявлять HTML-контент. Это гарантирует корректную сопоставляемость стандартных тегов, даже если автоматическое обнаружение отключено.

    htmlDictionary.content.ts
    import { html, type Dictionary } from "intlayer";const htmlDictionary = {  key: "app",  contentAutoTransformation: true, // можно задать в файле конфигурации  content: {    myHtmlContent:  html("<p>Привет <strong>Мир</strong></p>"),  },} satisfies Dictionary;export default htmlDictionary;

    Узел html()

    Функция html(), это новая возможность в Intlayer v8, которая позволяет явно определять HTML-контент в ваших словарях. Хотя Intlayer часто может автоматически определять HTML-контент, использование функции html() дает несколько преимуществ:

    • Типобезопасность: Функция html() позволяет определять ожидаемые пропсы для пользовательских компонентов, обеспечивая лучшее автодополнение и проверку типов в вашем редакторе.
    • Явное объявление: Это гарантирует, что строка всегда будет рассматриваться как HTML, даже если она не содержит стандартных HTML-тегов, которые могли бы активировать автоматическое определение.
    • Определение пользовательских компонентов: Вы можете передать второй аргумент в html(), чтобы определить пользовательские компоненты и ожидаемые типы их пропсов.
    typescript
    import { html } from "intlayer";const myContent = html(  "<MyCustomComponent title='Привет'>Мир</MyCustomComponent>",  {    MyCustomComponent: {      title: "string",      children: "node",    },  });

    При использовании метода .use() для HTML-узла предоставленные вами компоненты будут проверяться на соответствие определению, указанному в функции html() (если оно доступно).


    Рендеринг HTML

    Рендеринг можно осуществлять автоматически с помощью системы контента Intlayer или вручную с использованием специализированных инструментов.

    Автоматический рендеринг (с использованием useIntlayer)

    Когда вы получаете контент через useIntlayer, HTML-узлы уже подготовлены для рендеринга.

    HTML-узлы можно рендерить напрямую как JSX. Стандартные теги работают автоматически.

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

    Используйте метод .use() для предоставления пользовательских компонентов или переопределения тегов:

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

    Глобальная конфигурация с HTMLProvider

    Вы можете настроить рендеринг HTML глобально для всего приложения. Это удобно для определения пользовательских компонентов, которые должны быть доступны во всём 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>);

    Вы также можете использовать свой собственный рендерер 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>);
    Динамический импорт рендерера HTML - хороший способ уменьшить размер бандла вашего приложения.

    Ручной рендеринг и расширенные инструменты

    Если вам нужно рендерить сырые HTML-строки или иметь больший контроль над маппингом компонентов, используйте следующие инструменты.

    Компонент <HTMLRenderer />

    tsx
    import { HTMLRenderer } from "react-intlayer/html";<HTMLRenderer components={{ p: MyCustomP }}>  {"<p>Привет, мир</p>"}</HTMLRenderer>

    Хук useHTMLRenderer()

    Возвращает предварительно настроенную функцию рендеринга.

    tsx
    import { useHTMLRenderer } from "react-intlayer/html";const renderHTML = useHTMLRenderer({  components: { strong: (props) => <strong {...props} className="text-red-500" /> }});return renderHTML("<p>Привет <strong>Мир</strong></p>");

    Утилита renderHTML()

    Утилита для рендеринга вне компонентов.

    tsx
    import { renderHTML } from "react-intlayer/html";const jsx = renderHTML("<p>Привет</p>", { components: { p: 'div' } });

    Справочник опций

    Эти опции могут быть переданы в HTMLProvider, HTMLRenderer, useHTMLRenderer и renderHTML.

    Опция Тип По умолчанию Описание
    components Record<string, any> {} Отображение HTML-тегов или имён пользовательских компонентов на соответствующие компоненты.
    renderHTML Function null Пользовательская функция рендеринга для полной замены стандартного HTML-парсера (только для провайдеров Vue/Svelte).
    Примечание: для React и Preact стандартные HTML-теги предоставляются автоматически. Вам нужно передавать проп components только если вы хотите переопределить их или добавить пользовательские компоненты.