Dangerously set innerHTML alternative

There may be an occasion that you need to render an HTML string when using React.

In most situations, dangerouslySetInnerHTML should suffice:

<div dangerouslySetInnerHTML={{
    __html: '<em>foo</em>'
}} />

But are there any other alternatives?

There are, and one of them is called html-react-parser.


First install the package and its dependencies:

npm install html-react-parser react react-dom

Now you can do something like this:


When parsing the HTML string, you can even replace HTML elements with your own custom React elements:

import Parser from 'html-react-parser';

    {Parser('<em>foo</em>', {
        replace: (domNode) => {
            if (domNode.name === 'em') {
                return <strong>bar</strong>;

Want to play with it some more? Check out the repository and this fiddle:

Please support this site and join our Discord!