How do I render Markdown from a React component? How do I render Markdown from a React component? javascript javascript

How do I render Markdown from a React component?


You can use React-Markdown:

const React = require('react')const ReactDOM = require('react-dom')const ReactMarkdown = require('react-markdown')const input = '# This is a header\n\nAnd this is a paragraph'ReactDOM.render(<ReactMarkdown source={input} />, document.getElementById('container'))

Or... You can just create a simple React component that wraps a call to a Markdown parser. There are two very good ones for JavaScript:

Now, you can create a component like this:

var MarkdownViewer = React.createClass({    render: function() {        // pseudo code here, depends on the parser        var markdown = markdown.parse(this.props.markdown);        return <div dangerouslySetInnerHTML={{__html:markdown}} />;    }});

There used to have one already, but it doesn't seem to be maintained anymore: https://github.com/tcoopman/markdown-react

Also, if you need a React Markdown Editor, check out: react-mde. Disclaimer: I am the author.


The package react-markdown with Markdown component will be good choice:

import React from 'react'import Markdown from 'react-markdown'    var src = "# This is markdown document"    React.render(  <Markdown children={src} />,  document.getElementById('root'))

You can write inplace here-docs like this:

<Markdown>  # Header  * dotted lists  * [url](/doc)</Markdown>

It is possible to specify transformers for link-urls and image-urls and much more.


Example of Markdown component that renders html from markdown text, the logic of loading data should be implemented in separate store/parent component/whatever. I am using marked package for converting markdown to html.

import React from 'react';import marked from 'marked';export default class MarkdownElement extends React.Component {  constructor(props) {    super(props);    marked.setOptions({      gfm: true,      tables: true,      breaks: false,      pedantic: false,      sanitize: true,      smartLists: true,      smartypants: false    });  }  render() {    const { text } = this.props,      html = marked(text || '');    return (<div>      <div dangerouslySetInnerHTML={{__html: html}} />    </div>);  }}MarkdownElement.propTypes = {  text: React.PropTypes.string.isRequired};MarkdownElement.defaultProps = {  text: ''};