问题描述
我的文档是用 Markdown 编写的,我想将这些文件从我的 JSX(ES6+CommonJS)代码渲染到 React 组件中。 我怎样才能做到这一点?
 
    例如,我有 style.markdown 并且我想将它呈现为<p>标签。
1楼
您可以使用 :
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'))
或者...您可以创建一个简单的 React 组件来包装对 Markdown 解析器的调用。 JavaScript 有两个非常好的方法:
现在,您可以创建这样的组件:
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}} />;
    }
});
曾经有一个,但似乎不再维护了: :
另外,如果您需要 React Markdown 编辑器,请查看: 。 免责声明:我是作者。
2楼
    带有Markdown组件的包将是不错的选择:
import React from 'react'
import Markdown from 'react-markdown'
var src = "# Load the markdown document"
React.render(
    <Markdown source={src} />,
    document.getElementById('root')
);
3楼
从 Markdown 文本呈现 html 的 Markdown 组件示例,加载数据的逻辑应该在单独的存储/父组件/任何东西中实现。 我正在使用包将降价转换为 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: ''
};
4楼
我参加聚会有点晚了,但我为上面提到的那些编写了一个竞争对手库,它有一个额外的好处,即不需要dangerouslySetInnerHtml SetInnerHtml hack:  : 
5楼
尝试这样的事情:
import fs from 'fs';
import React, { Component, PropTypes } from 'react';
class Markdown extends Component {
    constructor() {
        super(props);
        this.state = { contents: '' };
        this.componentDidMount = this.componentDidMount.bind(this);
    }
    componentDidMount() {
        const contents = fs.readFileSync(this.props.path, 'utf8');
        this.setState({ contents });
    }
    render()
        return (
            <div>
                {this.state.contents.split('\n').map((line, i) =>
                    line ? <p key={i}>{line}</p> : <br key={i} />)}
            </div>
        );
    }
}
Markdown.propTypes = { path: PropTypes.string.isRequired };
React.render(<Markdown path='./README.md' />, document.body);
或者,如果您使用的是 ES7+ 功能:
import fs from 'fs';
import React, { Component, PropTypes } from 'react';
class Markdown extends Component {
    static propTypes = { path: PropTypes.string.isRequired };
    state = { contents: '' };
    componentDidMount = () => {
        const contents = fs.readFileSync(this.props.path, 'utf8');
        this.setState({ contents });
    };
    render() {
        return (
            <div>
                {this.state.contents.split('\n').map((line, i) =>
                    line ? <p key={i}>{line}</p> : <br key={i} />)}
            </div>
        );
    }
}
React.render(<Markdown path='./README.md' />, document.body);
如果这是在客户端运行,您将需要使用转换才能使用 fs.readFileSync。