通过react-markdown
模块轻松渲染markdown数据。但我无法通过自定义*.md
组件实现渲染所有MarkdownPage
文件:
<Route path="*.md" component={MarkdownPage} />
但路由不起作用,*.md
- 文件在浏览器中按原样打开。
我希望通过props
将此文件作为数据提供给组件,以执行以下操作:
render() {
return (
<h1>Pretty markdown</h1>
<Page>
<ReactMarkdown source={this.props} />
</Page>
);
}
我怎么能实现这个目标?
答案 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)