I'm currently loading Markdown files using raw-loader
.
webpack.config.dev.js
rules: [
...
{
oneOf: [
...
{test: /\.md$/, use: 'raw-loader'},
...
],
},
],
Other than setting a map of renderers, the Page
component should read a path from its props and delegate it to ReactMarkdown
. Here the source is hard-coded to the content of page/example.md
.
src/components/page.js
import ReactMarkdown from 'react-markdown';
import content from '../pages/example.md';
class Page extends React.Component {
render() {
return (
<ReactMarkdown source={content} />
);
}
}
src/index.js
import { BrowserRouter as Router, Route } from 'react-router-dom';
function Application() {
return (
<Router>
<Route exact path="/" render={() => <Page source="home.md" />} />
<Route exact path="/foo/" render={() => <Page source="foo.md" />} />
<Route exact path="/bar/" render={() => <Page source="bar.md" />} />
</Router>
);
}
How can I dynamically raw-load the path passed through props while Page
is mounting?
src/components/page.js
import ReactMarkdown from 'react-markdown';
class Page extends React.Component {
state = {content: null};
componentDidMount() {
import('../pages/' + this.props.source).then(
content => this.setState({content: content}),
() => this.setState({content: null})
);
}
render() {
let { content } = this.state;
return content ? (
<ReactMarkdown renderers={renderers} source={content} />
) : null;
}
}