Рендеринг JSX внутри ReactMarkDown

Как рендерить JSX внутри ReactMarkDown? Я хочу обернуть свои JSX-элементы внутрь ReactMarkDown компонент и добиться чего-то вроде этого,

        <ReactMarkdown>
    <Grid>
      {Some text}
    </Grid>
    <Grid>
      {Some text}
    </Grid>
 </ReactMarkdown>

Каков наилучший подход для этого, а не использование <ReactMarkdown> несколько раз внутри каждого элемента JSX?

2 ответа

Вы можете создать собственный компонент.

Этот пример компонента отображает ваш дочерний узел и оборачивает каждый дочерний элемент ReactMarkDown.

https://reactjs.org/docs/react-api.html#reactchildrenmap

      const MarkdownPlus = ({ children }) => (        
    React.Children.map(children, child => (
       <ReactMarkdown>
              {React.cloneElement(child, {})}
       </ReactMarkdown>
    )))
);

И используйте это так

       <MarkdownPlus>
    <Grid>
      {Some text}
    </Grid>
    <Grid>
      {Some text}
    </Grid>
 </MarkdownPlus>

React.Children.map и children.map, в чем разница?

Отказ от ответственности: я не уверен, принимает ли ReactMarkdown как дочерний элемент или нет. Если он принимает только простой текст (код уценки), то приведенный выше код не будет работать. Вам нужно будет подать заявку <ReactMarkDown> для каждого <Grid>.

Вы можете взглянуть на MDX, он позволяет вам использовать JSX и уценку вместе.

Например:

      <Grid>
  # heading
</Grid>
<Grid>
  *italic*
</Grid>
Другие вопросы по тегам