通过自定义组件反映渲染* .md

时间:2016-11-29 21:15:04

标签: reactjs markdown

通过react-markdown模块轻松渲染markdown数据。但我无法通过自定义*.md组件实现渲染所有MarkdownPage文件:

<Route path="*.md" component={MarkdownPage} />

但路由不起作用,*.md - 文件在浏览器中按原样打开。

我希望通过props将此文件作为数据提供给组件,以执行以下操作:

render() {
  return (
    <h1>Pretty markdown</h1>
    <Page>
      <ReactMarkdown source={this.props} />
    </Page>
  );
}  

我怎么能实现这个目标?

1 个答案:

答案 0 :(得分:2)

一种方法是对.md文件或包含markdown作为字符串的JSON使用GET请求。这是一个例子:

class ReactMarkdown extends React.Component {
  constructor() {
    super();
    this.state = { html: '' };
  }

  componentDidMount() {
    fetch(this.props.md)
      .then(response => response.text())
      .then(markdown => this.setState({ html: marked(markdown) }));
  }

  render() {
    return (
      <div dangerouslySetInnerHTML={{ __html: this.state.html }}></div>
    );
  }
}

ReactDOM.render(<ReactMarkdown md="https://cdn.rawgit.com/fabe/react-portfolio/master/README.md"/>, document.getElementById('View'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/0.3.6/marked.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="View"></div>

使用React Router:

<Route path="/markdown/:file" component={MarkdownPage} />
// Example route: localhost:3000/markdown/x.md

然后在你的组件内:

fetch('/' + this.props.params.file)