Zadaj pytanie i otrzymaj streszczenie dokumentu, odwołując się do tej strony i wybranego dostawcy AI
Historia wersji
- "Zezwalaj na wstępne parsowanie AST Markdown dla SSR / hydratacji"v8.11.028.05.2026
- "Dodano obsługę plików `.content.md`"v8.10.019.05.2026
- "Dodano obiekt wtyczki `intlayerMarkdown`; użyj `app.use(intlayerMarkdown)` zamiast `app.use(installIntlayerMarkdown)`"v8.5.024.03.2026
- "Przeniesiono import z `{{framework}}-intlayer` do `{{framework}}-intlayer/markdown`"v8.5.024.03.2026
- "Dodano narzędzie MarkdownRenderer / useMarkdownRenderer / renderMarkdown i opcję forceInline"v8.0.022.01.2026
- "Automatyczna dekoracja treści markdown, obsługa MDX i SSR"v8.0.018.01.2026
- "Zainicjowano historię"v5.5.1029.06.2025
Treść tej strony została przetłumaczona przy użyciu sztucznej inteligencji.
Zobacz ostatnią wersję oryginalnej treści w języku angielskimIf 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 / Treść w postaci tekstu sformatowanego
Intlayer obsługuje treści w postaci tekstu sformatowanego (Rich Text) definiowane za pomocą składni Markdown. Pozwala to na łatwe pisanie i utrzymywanie bogato sformatowanych treści, takich jak blogi, artykuły i inne.
Deklarowanie treści Markdown
Możesz zadeklarować treść Markdown używając funkcji md lub po prostu jako ciąg znaków (jeśli zawiera składnię Markdown).
Począwszy od wersji 8.10.0, możesz deklarować treść Markdown bezpośrednio w plikach .content.md. Intlayer automatycznie wykryje i przetworzy treść Markdown.
Skopiuj kod do schowka
---key: my-markdown-contentdescription: Moja treśćlocale: en---# Moja treśćOto przykład treści markdownPole front-matter locale to pole, które definiuje język treści. Jest ono opcjonalne. Jeśli nie zostanie podane, Intlayer użyje języka domyślnego, który służy również jako język zastępczy, jeśli nie jest dostępne tłumaczenie dla określonego języka.
Przykład struktury plików:
Skopiuj kod do schowka
content├── markdown-file.en.content.md├── markdown-file.fr.content.md└── markdown-file.es.content.mdDo front-matter można dodać dowolne właściwości zdefiniowane w Definicji słownika
Renderowanie Markdown
Intlayer zapewnia dwa niezależne sposoby renderowania Markdown:
Przez
useIntlayer— Intlayer automatycznie przekształca węzełmdw natywny wynik frameworka (JSX, VNode, ciąg znaków HTML).- Frontmatter jest analizowany i eksponowany jako
.metadata. Możesz nadpisać renderowanie na dwóch poziomach — globalnie za pomocąMarkdownProvider(lub odpowiednika frameworka) i lokalnie dla węzła za pomocą.use(). Oba można łączyć;.use()ma pierwszeństwo przedMarkdownProvider, który z kolei ma pierwszeństwo przed ustawieniami domyślnymi.
- Frontmatter jest analizowany i eksponowany jako
Narzędzia pomocnicze —
<MarkdownRenderer />,useMarkdownRenderer()irenderMarkdown()to samodzielne narzędzia, które akceptują tylko surowe ciągi znaków Markdown. Są one niezależne oduseIntlayeri nie działają ze zwracanymi przez nie udekorowanymi węzłami.
Renderowanie Markdown obsługuje MDX — użyj dowolnego komponentu JSX/frameworka podając jego nazwę bezpośrednio w swoim Markdown.
1. Automatyczne renderowanie (przez useIntlayer)
Węzły Markdown można renderować bezpośrednio jako JSX.
Skopiuj kod do schowka
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} />, // Komponent MDX }} > <AppContent /> </MarkdownProvider>);Jeśli MarkdownProvider nie jest obecny, Intlayer użyje domyślnego parsera Markdown do JSX do wyrenderowania markdownu.
Możesz również zapewnić lokalne nadpisania dla określonych węzłów za pomocą metody .use():
Skopiuj kod do schowka
{myMarkdownContent.use({ h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,})}Możesz pobrać Markdown jako ciąg znaków:
Skopiuj kod do schowka
{myMarkdownContent.value}{String(myMarkdownContent)}{myMarkdownContent.toString()}Możesz uzyskać dostęp do metadanych markdown w ten sposób:
Skopiuj kod do schowka
{myMarkdownContent.metadata}{myMarkdownContent.metadata.title}2. Narzędzia pomocnicze (tylko ciągi znaków Markdown)
Te narzędzia renderują tylko surowe ciągi znaków Markdown i są niezależne od useIntlayer. Używaj ich, gdy musisz wyrenderować Markdown ze źródeł innych niż słowniki.
Komponent <MarkdownRenderer />
Renderuje ciąg znaków Markdown z określonymi opcjami.
Skopiuj kod do schowka
import { MarkdownRenderer } from "react-intlayer/markdown";<MarkdownRenderer forceBlock={true} tagfilter={true}> {"# Mój Tytuł"}</MarkdownRenderer>Hook useMarkdownRenderer()
Pobierz wstępnie skonfigurowaną funkcję renderowania.
Skopiuj kod do schowka
import { useMarkdownRenderer } from "react-intlayer/markdown";const renderMarkdown = useMarkdownRenderer({ forceBlock: true, components: { h1: (props) => <h1 {...props} className="custom" /> }});return renderMarkdown("# Mój Tytuł");Narzędzie renderMarkdown()
Samodzielne narzędzie do renderowania poza komponentami.
Skopiuj kod do schowka
import { renderMarkdown } from "react-intlayer/markdown";const jsx = renderMarkdown("# Mój Tytuł", { forceBlock: true });Konfiguracja globalna z MarkdownProvider
MarkdownProvider (lub jego odpowiednik we frameworku) konfiguruje potok renderowania Markdown dla całej aplikacji. Dotyczy to zarówno automatycznego renderowania useIntlayer, jak i narzędzi pomocniczych. Ustawione tutaj opcje są ustawieniami domyślnymi — .use() nadpisuje je na poziomie węzła.
Skopiuj kod do schowka
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>);MDX jest obsługiwany — każda nazwa komponentu użyta wewnątrz twojego Markdown (np.<MyCustomJSXComponent />) jest rozwiązywana względem mapycomponents.
Możesz również użyć własnego renderera markdown:
Skopiuj kod do schowka
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>);Dynamiczne importowanie twojego renderera Markdown to świetny sposób na zmniejszenie rozmiaru pakietu twojej aplikacji.
Suspense
Renderer Markdown Intlayer jest ładowany dynamicznie. Mimo optymalizacji, bazowy fragment parsera zajmuje około 55 kb. Synchroniczne ładowanie tego opóźnia początkowe renderowanie strony i pogarsza First Contentful Paint (FCP).
Aby zapobiec blokowaniu interfejsu użytkownika, Intlayer integruje się z API Suspense Reacta. Pobiera parser w tle i rzuca Promise podczas pobierania.
Zawiń dowolny komponent renderujący Intlayer Markdown w granicę <Suspense>. Wyświetli to zlokalizowany stan rezerwowy podczas pobierania fragmentu, umożliwiając natychmiastowe renderowanie reszty DOM.
Ostrzeżenie: Jeśli nie zapewnisz granicy <Suspense>, React wstrzyma działanie na poziomie głównym lub zablokuje renderowanie całego drzewa komponentów do czasu pełnego załadowania 55 kb fragmentu.
W Next.js App Router można użyć React Suspense dla komponentów klienckich lub pliku loading.tsx dla komponentów serwerowych.
Komponent kliencki:
Skopiuj kod do schowka
"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>);};Komponent serwerowy z loading.tsx:
Skopiuj kod do schowka
export default function Loading() {return <div>Loading...</div>;}Skopiuj kod do schowka
import { useIntlayer } from "next-intlayer/server";const MyPage = () => {const markdownContent = useIntlayer("my-markdown");return <div>{markdownContent}</div>;};export default MyPage;Renderowanie po stronie serwera (SSR) i hydratacja
W porównaniu do innych parserów Markdown, takich jak remark / rehype, Intlayer Markdown jest pozbawiony zależności i działa zarówno po stronie klienta, jak i serwera.
Jednak Intlayer optymalizuje parsowanie dla frameworków renderowania po stronie serwera (SSR) (takich jak Next.js App Router, React Router, Nuxt, SvelteKit itp.).
Zamiast wysyłać surowe ciągi Markdown do klienta i parsować je w przeglądarce (co powoduje spadek wydajności), Intlayer pozwala na wstępne sparsowanie Markdown do abstrakcyjnego drzewa składniowego (AST) na serwerze.
Możesz użyć funkcji parseMarkdown z pakietu Intlayer swojego frameworka po stronie serwera, aby wygenerować serializowalne AST (obiekt ParsedMarkdown) i przekazać je bezpośrednio do frontendu. Wszystkie narzędzia renderujące Intlayer (takie jak <MarkdownRenderer>, useMarkdownRenderer itp.) automatycznie akceptują ten obiekt AST i renderują go bez zakłóceń.
Przykład w architekturze serwer/klient
Skopiuj kod do schowka
import { parseMarkdown } from "react-intlayer/markdown";// 1. Na serwerze: Sparsuj markdown do serializowalnego ASTexport const loader = async () => { const markdownString = "## My title \n\nLorem Ipsum"; const ast = parseMarkdown(markdownString); // Zwróć AST jako JSON do klienta return Response.json({ content: ast });};Skopiuj kod do schowka
import { useLoaderData } from "react-router";import { MarkdownRenderer } from "react-intlayer/markdown";// 2. Na kliencie: Renderuj AST bezpośrednio bez ponownego parsowaniaexport default function Page() { const { content } = useLoaderData(); // Renderer akceptuje surowy ciąg znaków lub sparsowane AST return <MarkdownRenderer content={content} />;}Ten wzorzec zapewnia, że logika parsowania Markdown jest wykonywana całkowicie na serwerze, co znacznie skraca czas wykonywania po stronie klienta i poprawia szybkość początkowej hydratacji.
Opcje referencyjne
Te opcje można przekazać do MarkdownProvider, MarkdownRenderer, useMarkdownRenderer i renderMarkdown.
Otwórz tabelę w oknie modalnym, aby wyraźnie zobaczyć całą zawartość
| Option | Type | Default | Opis |
|---|---|---|---|
forceBlock | boolean | false | Wymusza zawijanie wyjścia w element blokowy (np. <div>). |
forceInline | boolean | false | Wymusza zawijanie wyjścia w element liniowy (np. <span>). |
tagfilter | boolean | true | Włącza GitHub Tag Filter w celu zwiększenia bezpieczeństwa poprzez usuwanie niebezpiecznych tagów HTML. |
preserveFrontmatter | boolean | false | Jeśli true, frontmatter na początku ciągu Markdown nie zostanie usunięty. |
components | Overrides | {} | Mapa tagów HTML na niestandardowe komponenty (np. { h1: MyHeading }). |
wrapper | Component | null | Niestandardowy komponent do zawijania renderowanego Markdown. |
renderMarkdown | Function | null | Niestandardowa funkcja renderowania, aby całkowicie zastąpić domyślny kompilator Markdown. |