Safely parse HTML, SVG and MathML into React elements.
import { Markup } from 'react-render-markup';
<Markup [...props] />-
allowedarray of tag names to allow rendering.⚠️ Setting this option will strip all other elements from output. -
markupstring of HTML you’d like to parse. -
replaceobject of elements to replace.The keys are tag names to replace and values are the type to replace with (either tag name string or a React component type.)
-
trimboolean removes whitespace text nodes whentrue.
import { renderMarkup } from 'react-render-markup';
renderMarkup(markup[, options])-
markupstring of HTML you’d like to parse. -
optionsoptional object of the following options:-
allowedarray of tag names to allow rendering.⚠️ Setting this option will strip all other elements from output. -
replaceobject of elements to replace.The keys are tag names to replace and values are the type to replace with (either tag name string or a React component type.)
-
trimboolean removes whitespace text nodes whentrue.
-
An array of React elements.
const MyComponent = (props) => {
const { content } = props;
return (
<div>
<Markup markup={content} />
</div>
);
};or
const MyComponent = (props) => {
const { content } = props;
return <div>{renderMarkup(content)}</div>;
};const allowed = ['strong', 'em']; // strips all other elements
const MyComponent = (props) => {
const { content } = props;
return (
<div>
<Markup allowed={allowed} markup={content} />
</div>
);
};or
const MyComponent = (props) => {
const { content } = props;
return (
<div>
{renderMarkup(content, {
allowed: ['strong', 'em'],
})}
</div>
);
};import { Link } from 'some-router-library';
const replace = {
a: Link, // replace <a> elements with <Link> component
em: 'strong', // replace <em> elements with <strong> elements
img: null, // doesn’t render <img> elements
span: React.Fragment, // unwraps contents of <span> elements
};
const MyComponent = (props) => {
const { content } = props;
return (
<div>
<Markup markup={content} replace={replace} />
</div>
);
};or
import { Link } from 'some-router-library';
const MyComponent = (props) => {
const { content } = props;
return (
<div>
{renderMarkup(content, {
replace: {
a: Link,
em: 'strong',
img: null,
span: React.Fragment,
},
})}
</div>
);
};By default, <script> tags and event attributes (i.e. onClick) are disallowed and stripped from output.
If you’re parsing user inputed markup, you’ll want to use some sort of HTML sanitizer first.