MDX e React
Usando JSX no Markdown#
O Docusaurus tem suporte embutido para MDX, que permite que você escreva JSX dentro de seus arquivos Markdown e processá-los como componentes React.
note
Enquanto ambos os arquivos .md e .mdx são analisados usando MDX, alguns da sintaxe são tratados de forma ligeiramente diferente. Para a análise mais precisa e melhor suporte a editores, recomendamos usar a extensão .mdx para arquivos que contenham sintaxe MDX.
caution
O MDX não é 100% compatível com o CommonMark.
Use o MDX playground para garantir que a sua sintaxe é um MDX válido.
Tente este bloco aqui:
export const Highlight = ({children, color}) => (  <span    style={{      backgroundColor: color,      borderRadius: '2px',      color: '#fff',      padding: '0.2rem',    }}>    {children}  </span>);
<Highlight color="#25c2a0">Docusaurus green</Highlight> and <Highlight color="#1877F2">Facebook blue</Highlight> are my favorite colors.
Eu posso escrever **Markdown** ao lado de meu _JSX_!Observe como ele renderiza tanto o markup do seu componente React como a sintaxe Markdown:
Eu posso escrever Markdown ao lado de meu JSX!
Você também pode importar seus próprios componentes definidos em outros arquivos ou componentes de terceiros instalados via npm! Confira a documentação MDX para ver quais outras coisas legais que você consegue fazer com o MDX.
caution
Como todos os arquivos doc são analisados usando MDX, qualquer HTML é tratado como JSX. Portanto, se você precisar criar um estilo embutido em um componente, siga o tipo JSX e forneça objetos de estilo. Este comportamento é diferente do Docusaurus 1. Veja também Migrando da v1 para a v2.
Importando trechos de código#
Você não pode apenas importar um arquivo contendo uma definição de componente, mas também importar qualquer arquivo de código como texto bruto e, em seguida, inseri-lo em um bloco de código, graças ao Webpack raw-loader. Para usar o raw-loader, primeiro você precisa instalá-lo em seu projeto:
- npm
 - Yarn
 
npm install --save raw-loaderyarn add raw-loaderAgora você pode importar trechos de código a partir de outro arquivo da seguinte forma:
import CodeBlock from '@theme/CodeBlock';import MyComponentSource from '!!raw-loader!./myComponent';
<CodeBlock className="language-jsx">{MyComponentSource}</CodeBlock>/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */
import React, {useState} from 'react';
export default function MyComponent() {  const [bool, setBool] = useState(false);  return (    <div>      <p>MyComponent rendered !</p>      <p>bool={bool ? 'true' : 'false'}</p>      <p>        <button onClick={() => setBool((b) => !b)}>toggle bool</button>      </p>    </div>  );}Você também pode passar a propriedade title para o componente CodeBlock a fim de exibi-lo como cabeçalho acima do seu bloco de código:
<CodeBlock className="language-jsx" title="/src/myComponent">  {MyComponentSource}</CodeBlock>note
Você deve usar <CodeBlock> em vez do Markdown triple-backtick ```, porque o último enviará qualquer conteúdo como está, mas você deseja JSX para inserir o texto importado aqui.
warning
Este recurso é experimental e pode estar sujeito a alterações importantes da API no futuro.
Importando Markdown#
Você pode usar arquivos Markdown como componentes e importá-los em outro lugar, em arquivos Markdown ou nas páginas React.
Por convenção, usar o  _ prefixo de nome de arquivo não criará nenhuma página de documento e significa que o arquivo markdown é um "parcial", a ser importado por outros arquivos.
<span>Olá {props.name}</span>
Este é um texto de alguns conteúdos de `_markdown-partial-example.mdx`.import PartialExample from './_markdown-partial-example.mdx';
<PartialExample name="Sebastien" />;Este é um texto com parte do conteúdo de _markdown-partial-example.md.
Desta forma, você pode reutilizar o conteúdo entre várias páginas e evitar a duplicação de materiais.
caution
Atualmente o conteúdo da tabela não contém as categorias Markdown importadas. Essa é uma limitação técnica que estamos tentando resolver (issue).