CtsLucas / github-blog

3ยฐ Desafio do Mรณdulo de React JS - Rocketseat
https://github-blog-git-main-ctslucas.vercel.app/
0 stars 0 forks source link

Lib React Markdown #1

Open CtsLucas opened 1 year ago

CtsLucas commented 1 year ago

A demo of react-markdown

react-markdown is a markdown component for React.

๐Ÿ‘‰ Changes are re-rendered as you type.

๐Ÿ‘ˆ Try writing some markdown on the left.

Overview

Table of contents

Here is an example of a plugin in action (remark-toc). This section is replaced by an actual table of contents.

Syntax highlighting

Here is an example of a plugin to highlight code: rehype-highlight.

import React from 'react'
import ReactDOM from 'react-dom'
import ReactMarkdown from 'react-markdown'
import rehypeHighlight from 'rehype-highlight'

ReactDOM.render(
  <ReactMarkdown rehypePlugins={[rehypeHighlight]}>{'# Your markdown here'}</ReactMarkdown>,
  document.querySelector('#content')
)

Pretty neat, eh?

GitHub flavored markdown (GFM)

For GFM, you can also use a plugin: remark-gfm. It adds support for GitHub-specific extensions to the language: tables, strikethrough, tasklists, and literal URLs.

These features do not work by default. ๐Ÿ‘† Use the toggle above to add the plugin.

Feature Support
CommonMark 100%
GFM 100% w/ remark-gfm

strikethrough

https://example.com

HTML in markdown

โš ๏ธ HTML in markdown is quite unsafe, but if you want to support it, you can use rehype-raw. You should probably combine it with rehype-sanitize.

๐Ÿ‘† Use the toggle above to add the plugin.

Components

You can pass components to change things:

import React from 'react'
import ReactDOM from 'react-dom'
import ReactMarkdown from 'react-markdown'
import MyFancyRule from './components/my-fancy-rule.js'

ReactDOM.render(
  <ReactMarkdown
    components={{
      // Use h2s instead of h1s
      h1: 'h2',
      // Use a component instead of hrs
      hr: ({node, ...props}) => <MyFancyRule {...props} />
    }}
  >
    # Your markdown here
  </ReactMarkdown>,
  document.querySelector('#content')
)

More info?

Much more info is available in the readme on GitHub!


A component by Espen Hovlandsdal