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.

Usage

First install the package and its dependencies:

npm install html-react-parser react react-dom

Now you can do something like this:

<div>
    {require('html-react-parser')(
        '<em>foo</em>'
    )}
</div>

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

import Parser from 'html-react-parser';

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

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



Please support this site and join our Discord!