react-render-markup
react-render-markup copied to clipboard
:eight_pointed_black_star: Parse HTML into React elements.
react-render-markup
Safely parse HTML, SVG and MathML into React elements.
- :gift: Lightweight
- :smile: Easy to use with simple API
- :printer: Server-side rendering out of the box
Usage
Markup component
import { Markup } from 'react-render-markup';
<Markup [...props] />
Props
-
allowedarray of tag names to allow rendering.:warning: 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.
renderMarkup function
import { renderMarkup } from 'react-render-markup';
renderMarkup(markup[, options])
Parameters
-
markupstring of HTML you’d like to parse. -
optionsoptional object of the following options:-
allowedarray of tag names to allow rendering.:warning: 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.
-
Return value
An array of React elements.
Examples
Basic
const MyComponent = (props) => {
const { content } = props;
return (
<div>
<Markup markup={content} />
</div>
);
};
or
const MyComponent = (props) => {
const { content } = props;
return <div>{renderMarkup(content)}</div>;
};
With allowed option
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>
);
};
With replace option
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>
);
};
Cross Site Scripting (XSS)
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.