Package Exports
- rehype-react
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (rehype-react) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
rehype-react
rehype plugin to transform to React.
Install
npm:
npm install rehype-react
Use
The following example shows how to create a Markdown input textarea, and corresponding rendered HTML output. The Markdown is processed to add a Table of Contents, highlight code blocks, and to render GitHub mentions (and other cool GH features).
import React from 'react'
import ReactDOM from 'react-dom'
import unified from 'unified'
import markdown from 'remark-parse'
import slug from 'remark-slug'
import toc from 'remark-toc'
import github from 'remark-github'
import remark2rehype from 'remark-rehype'
import highlight from 'rehype-highlight'
import rehype2react from 'rehype-react'
var processor = unified()
.use(markdown)
.use(slug)
.use(toc)
.use(github, {repository: 'rehypejs/rehype-react'})
.use(remark2rehype)
.use(highlight)
.use(rehype2react, {createElement: React.createElement})
class App extends React.Component {
constructor() {
super()
this.state = {text: '# Hello\n\n## Table of Contents\n\n## @rhysd'}
this.onChange = this.onChange.bind(this)
}
onChange(ev) {
this.setState({text: ev.target.value})
}
render() {
return (
<div>
<textarea value={this.state.text} onChange={this.onChange} />
<div id="preview">
{processor.processSync(this.state.text).result}
</div>
</div>
)
}
}
ReactDOM.render(<App />, document.querySelector('#root'))
Yields (in id="preview"
, on first render):
<div><h1 id="hello">Hello</h1>
<h2 id="table-of-contents">Table of Contents</h2>
<ul>
<li><a href="#rhysd">@rhysd</a></li>
</ul>
<h2 id="rhysd"><a href="https://github.com/rhysd"><strong>@rhysd</strong></a></h2></div>
API
origin.use(rehype2react[, options])
rehype (hast) plugin to transform to React.
Typically, unified compilers return string
.
This compiler returns a ReactElement
.
When using .process
or .processSync
, the value at file.result
(or when
using .stringify
, the return value), is a ReactElement
.
When using TypeScript, cast the type on your side.
ℹ️ In
unified@9.0.0
, the result of.process
changed fromtofile.contents
file.result
.
options
options.createElement
How to create elements or components (Function
).
You should typically pass React.createElement
.
options.Fragment
Create fragments instead of an outer <div>
if available (symbol
).
You should typically pass React.Fragment
.
options.components
Override default elements (such as <a>
, <p>
, etcetera) by passing an object
mapping tag names to components (Object.<Component>
, default: {}
).
For example, to use <MyLink>
components instead of <a>
, and <MyParagraph>
instead of <p>
, so something like this:
// …
.use(rehype2react, {
createElement: React.createElement,
components: {
a: MyLink,
p: MyParagraph
}
})
// …
options.prefix
React key prefix (string
, default: 'h-'
).
options.passNode
Pass the original hast node as props.node
to custom React components
(boolean
, default: false
).
Security
Use of rehype-react
can open you up to a cross-site scripting (XSS)
attack if the tree is unsafe.
Use rehype-sanitize
to make the tree safe.
Related
remark-rehype
— Transform Markdown (mdast) to HTML (hast)rehype-retext
— Transform HTML (hast) to natural language (nlcst)rehype-remark
— Transform HTML (hast) to Markdown (mdast)rehype-sanitize
— Sanitize HTML
Contribute
See contributing.md
in rehypejs/.github
for ways
to get started.
See support.md
for ways to get help.
This project has a code of conduct. By interacting with this repository, organization, or community you agree to abide by its terms.
License
MIT © Titus Wormer, modified by Tom MacWright, Mapbox, and rhysd.