// @flow import * as React from 'react'; type Props = { children: string, render: Function }; type State = { renderedText: string, error: string }; class RenderedText extends React.PureComponent { constructor(props: any) { super(props); this.state = { renderedText: '', error: '' }; } async _render() { const { render, children } = this.props; if (!children) { return; } try { const renderedText = await render(children); this.setState({ renderedText, error: '' }); } catch (err) { this.setState({ error: err.message }); } } componentDidMount() { this._render(); } componentDidUpdate() { this._render(); } render() { if (this.state.error) { return ( {this.state.error || 'Unknown Error'} ); } else { return this.state.renderedText || ''; } } } export default RenderedText;