Safely parse HTML, SVG and MathML into React elements.
import { Markup } from 'react-render-markup';
<Markup [...props] />
-
allowed
array of tag names to allow rendering.⚠️ Setting this option will strip all other elements from output. -
markup
string of HTML you’d like to parse. -
replace
object 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.)
-
trim
boolean removes whitespace text nodes whentrue
.
import { renderMarkup } from 'react-render-markup';
renderMarkup(markup[, options])
-
markup
string of HTML you’d like to parse. -
options
optional object of the following options:-
allowed
array of tag names to allow rendering.⚠️ Setting this option will strip all other elements from output. -
replace
object 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.)
-
trim
boolean 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.