Faça sua pergunta e obtenha um resumo do documento referenciando esta página e o provedor AI de sua escolha
Histórico de versões
- "Permitir a pré-análise do AST do Markdown para SSR / hidratação"v8.11.028/05/2026
- "Adicionado suporte a arquivos `.content.md`"v8.10.019/05/2026
- "Adicionado o objeto plugin `intlayerMarkdown`; use `app.use(intlayerMarkdown)` em vez de `app.use(installIntlayerMarkdown)`"v8.5.024/03/2026
- "Movida a importação de `{{framework}}-intlayer` para `{{framework}}-intlayer/markdown`"v8.5.024/03/2026
- "Adicionada a utilidade MarkdownRenderer / useMarkdownRenderer / renderMarkdown e a opção forceInline"v8.0.022/01/2026
- "Decoração automática de conteúdo markdown, suporte a MDX e SSR"v8.0.018/01/2026
- "Histórico inicializado"v5.5.1029/06/2025
O conteúdo desta página foi traduzido com uma IA.
Veja a última versão do conteúdo original em inglêsIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
Markdown / Conteúdo de Texto Rico
O Intlayer suporta conteúdo de texto rico definido usando a sintaxe Markdown. Isso permite que você escreva e mantenha facilmente conteúdos com formatação rica, como blogs, artigos e muito mais.
Declarando Conteúdo Markdown
Você pode declarar conteúdo Markdown usando a função md ou simplesmente como uma string (se ela contiver sintaxe Markdown).
A partir da versão 8.10.0, você pode declarar conteúdo Markdown diretamente em arquivos .content.md. O Intlayer detectará e processará automaticamente o conteúdo Markdown.
Copiar o código para a área de transferência
---key: my-markdown-contentdescription: Meu conteúdolocale: en---# Meu conteúdoAqui está um exemplo de conteúdo markdownO campo locale no front-matter é o campo que define a localização do conteúdo. É opcional. Se não for fornecido, o Intlayer usará o idioma padrão, que também é usado como idioma de fallback caso não haja tradução disponível para um idioma específico.
Exemplo de estrutura de diretórios:
Copiar o código para a área de transferência
content├── markdown-file.en.content.md├── markdown-file.fr.content.md└── markdown-file.es.content.mdVocê pode adicionar no front-matter quaisquer propriedades definidas na Definição de Dicionário
Renderizando Markdown
O Intlayer fornece duas maneiras independentes de renderizar Markdown:
Através do
useIntlayer— O Intlayer transforma automaticamente o nómdna saída nativa do framework (JSX, VNode, string HTML).- O Frontmatter é analisado e exposto como
.metadata. Você pode substituir a renderização em dois níveis — globalmente comMarkdownProvider(ou o equivalente do framework) e localmente por nó com.use(). Ambos podem ser combinados;.use()tem prioridade sobreMarkdownProvider, que por sua vez tem prioridade sobre o padrão.
- O Frontmatter é analisado e exposto como
Utilitários auxiliares —
<MarkdownRenderer />,useMarkdownRenderer()erenderMarkdown()são ferramentas autônomas que aceitam apenas strings Markdown brutas. Elas são independentes douseIntlayere não funcionam com os nós decorados que ele retorna.
A renderização do Markdown suporta MDX — use qualquer componente JSX/framework por nome diretamente no seu Markdown.
1. Renderização Automática (através de useIntlayer)
Nós Markdown podem ser renderizados diretamente como JSX.
Copiar o código para a área de transferência
import { useIntlayer } from "react-intlayer";import { MarkdownProvider } from "react-intlayer/markdown";const AppContent = () => { const { myMarkdownContent } = useIntlayer("app"); return <div>{myMarkdownContent}</div>;};const App = () => ( <MarkdownProvider components={{ h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>, MyButton: (props) => <button {...props} />, // Componente MDX }} > <AppContent /> </MarkdownProvider>);Se o MarkdownProvider não estiver presente, o Intlayer renderizará o markdown usando o parser padrão Markdown-para-JSX.
Você também pode fornecer substituições locais para nós específicos usando o método .use():
Copiar o código para a área de transferência
{myMarkdownContent.use({ h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,})}Você pode recuperar o Markdown como string:
Copiar o código para a área de transferência
{myMarkdownContent.value}{String(myMarkdownContent)}{myMarkdownContent.toString()}E você pode acessar os metadados do markdown assim:
Copiar o código para a área de transferência
{myMarkdownContent.metadata}{myMarkdownContent.metadata.title}2. Utilitários auxiliares (Somente Strings Markdown)
Estes utilitários renderizam apenas strings Markdown brutas e são independentes do useIntlayer. Use-os quando precisar renderizar Markdown de fontes além de seus dicionários.
Componente <MarkdownRenderer />
Renderiza uma string Markdown com opções específicas.
Copiar o código para a área de transferência
import { MarkdownRenderer } from "react-intlayer/markdown";<MarkdownRenderer forceBlock={true} tagfilter={true}> {"# Meu Título"}</MarkdownRenderer>Hook useMarkdownRenderer()
Obtém uma função de renderização pré-configurada.
Copiar o código para a área de transferência
import { useMarkdownRenderer } from "react-intlayer/markdown";const renderMarkdown = useMarkdownRenderer({ forceBlock: true, components: { h1: (props) => <h1 {...props} className="custom" /> }});return renderMarkdown("# Meu Título");Utilitário renderMarkdown()
Utilitário autônomo para renderização fora dos componentes.
Copiar o código para a área de transferência
import { renderMarkdown } from "react-intlayer/markdown";const jsx = renderMarkdown("# Meu Título", { forceBlock: true });Configuração Global com MarkdownProvider
O MarkdownProvider (ou o seu equivalente do framework) configura o pipeline de renderização Markdown para toda a sua aplicação. Aplica-se tanto para a renderização automática do useIntlayer quanto para os utilitários auxiliares. Opções definidas aqui são os padrões — o .use() substitui-os em nível de nó.
Copiar o código para a área de transferência
import { MarkdownProvider } from "react-intlayer/markdown";export const AppProvider = ({ children }) => ( <MarkdownProvider components={{ h1: (props) => <h1 style={{color: 'green'}} {...props} />, a: ({ href, ...props }) => <a style={{color: 'red'}} {...props} />, MyCustomJSXComponent: (props) => <span style={{color: 'red'}} {...props} />, }} > {children} </MarkdownProvider>);O MDX é suportado — qualquer nome de componente usado dentro do seu Markdown (ex:<MyCustomJSXComponent />) é resolvido com base no mapa decomponents.
Você também pode usar seu próprio renderizador de markdown:
Copiar o código para a área de transferência
import { MarkdownProvider } from "react-intlayer/markdown";export const AppProvider = ({ children }) => ( <MarkdownProvider renderMarkdown={async (md) => { // Use dynamic import to reduce the bundle size of your application const { renderMarkdown } = await import('react-intlayer/markdown'); return renderMarkdown(md); }} > {children} </MarkdownProvider>);Importar dinamicamente o seu renderizador de Markdown é uma ótima maneira de reduzir o tamanho do bundle da sua aplicação.
Suspense
O renderizador Markdown do Intlayer é carregado dinamicamente. Embora otimizado, o chunk do analisador subjacente tem aproximadamente 55 kb. Carregar isso de forma síncrona atrasa a renderização inicial da página e degrada o First Contentful Paint (FCP).
Para evitar o bloqueio da interface do usuário, o Intlayer se integra com a API Suspense do React. Ele busca o analisador em segundo plano e lança uma Promise durante o download.
Envolva qualquer componente que renderize o Intlayer Markdown em um limite <Suspense>. Isso exibe um estado de fallback localizado enquanto o chunk é baixado, permitindo que o restante de seu DOM seja renderizado imediatamente.
Aviso: Se você não fornecer um limite <Suspense>, o React irá suspender no nível raiz ou bloquear a renderização de toda a árvore de componentes até que o chunk de 55 kb seja totalmente carregado.
No Next.js App Router, você pode usar o React Suspense para componentes do cliente ou um arquivo loading.tsx para componentes do servidor.
Componente do Cliente:
Copiar o código para a área de transferência
"use client";import { useIntlayer } from "next-intlayer";import { Suspense } from "react";const MyComponent = () => {const markdownContent = useIntlayer("my-markdown");return ( <Suspense fallback={<div>Loading...</div>}>{markdownContent}</Suspense>);};Componente do Servidor com loading.tsx:
Copiar o código para a área de transferência
export default function Loading() {return <div>Loading...</div>;}Copiar o código para a área de transferência
import { useIntlayer } from "next-intlayer/server";const MyPage = () => {const markdownContent = useIntlayer("my-markdown");return <div>{markdownContent}</div>;};export default MyPage;Renderização no Lado do Servidor (SSR) e Hidratação
Em comparação com outros analisadores de Markdown, como remark / rehype, o Intlayer Markdown é livre de dependências e roda tanto no cliente quanto no servidor.
No entanto, o Intlayer otimiza a análise para frameworks de Renderização no Lado do Servidor (SSR) (como Next.js App Router, React Router, Nuxt, SvelteKit, etc.).
Em vez de enviar strings Markdown brutas para o cliente e analisá-las no navegador (o que acarreta uma perda de desempenho), o Intlayer permite pré-analisar o Markdown em uma Árvore de Sintaxe Abstrata (AST) no servidor.
Você pode usar a função parseMarkdown do pacote Intlayer do seu framework no lado do servidor para gerar uma AST serializável (objeto ParsedMarkdown) e passá-la diretamente para o frontend. Todos os utilitários de renderização do Intlayer (como <MarkdownRenderer>, useMarkdownRenderer, etc.) aceitam automaticamente esse objeto AST e o renderizam perfeitamente.
Exemplo em uma Arquitetura Servidor/Cliente
Copiar o código para a área de transferência
import { parseMarkdown } from "react-intlayer/markdown";// 1. No servidor: Analisar o markdown em uma AST serializávelexport const loader = async () => { const markdownString = "## My title \n\nLorem Ipsum"; const ast = parseMarkdown(markdownString); // Retornar a AST como JSON para o cliente return Response.json({ content: ast });};Copiar o código para a área de transferência
import { useLoaderData } from "react-router";import { MarkdownRenderer } from "react-intlayer/markdown";// 2. No cliente: Renderizar a AST diretamente sem reanalisarexport default function Page() { const { content } = useLoaderData(); // O renderizador aceita uma string bruta ou a AST analisada return <MarkdownRenderer content={content} />;}Esse padrão garante que a lógica de análise do Markdown seja executada inteiramente no servidor, reduzindo significativamente o tempo de execução no cliente e melhorando a velocidade de hidratação inicial.
Referência de opções
Essas opções podem ser passadas para MarkdownProvider, MarkdownRenderer, useMarkdownRenderer e renderMarkdown.
Abrir a tabela em um modal para ver todo o conteúdo claramente
| Option | Type | Default | Descrição |
|---|---|---|---|
forceBlock | boolean | false | Força a saída a ser envolvida em um elemento de nível de bloco (ex: <div>). |
forceInline | boolean | false | Força a saída a ser envolvida em um elemento em linha (ex: <span>). |
tagfilter | boolean | true | Habilita o GitHub Tag Filter para melhor segurança removendo tags HTML perigosas. |
preserveFrontmatter | boolean | false | Se true, o frontmatter no início da string Markdown não será removido. |
components | Overrides | {} | Um mapa de tags HTML para componentes personalizados (ex: { h1: MyHeading }). |
wrapper | Component | null | Um componente personalizado para envolver o Markdown renderizado. |
renderMarkdown | Function | null | Uma função de renderização personalizada para substituir completamente o compilador Markdown padrão. |