React component that renders an HTML string as a React component tree
npm install react-html-rendererReact component that renders an HTML string as a React component tree.
Note: This component uses [html-react-parser][html-react-parser] under the
hood but makes no promises about changing the underlying library in a future
release.


``sh`
npm install --save react-html-renderer
`jsx
import React from 'react'
import HTMLRenderer from 'react-html-renderer'
// Components to which elements are mapped
import Heading from './Heading'
import Subheading from './Subheading'
import Link from './Link'
// HTML to render as React components
const html =
// Note that default props can be set using the following pattern:
//
//
props =>
//
const App = () => (
html={html}
components={{
h1: props => ,
h2: Subheading,
a: Link,
}}
/>
)
`HTMLRenderer will render something that looks like the following:`jsx
;[
React ,
A JavaScript library for building user interfaces ,
Get Started
,
]
`Component overrides
HTMLRenderer supports overriding components provided in the components prop
as needed. This can be utilized to create a reusable HTMLRenderer with a
default set of components throughout your project.`jsx
// src/components/HTML.jsimport { Heading, Subheading, Link } from 'src/components'
export const HTML = props => (
components={{
h1: props => ,
}}
{...props}
/>
)
`The
HTML component could be used by passing it an HTML string.`js
// src/pages/index.jsimport { HTML } from 'src/components'
export const IndexPage = ({ html }) =>
`This will render
H1 elements with red text.If individual components need to be overridden, you can provide a mapping using
the
componentOverrides prop.`js
// src/pages/index.jsimport { HTML } from 'src/components'
export const IndexPage = ({ html }) => (
html={html}
componentOverrides={{
h1: Comp => props => ,
}}
/>
)
`This will render
H1 elements with blue text.Note that
Comp is the Heading component defined in the original components
prop. This allows you to keep the existing component and modify it as needed.
Alternatively, you could disregard Comp and return a completely different
component.Props
| Name | Type | Description |
| ------------------------ | ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------- |
|
html | PropTypes.string | HTML to render. |
| components | PropTypes.objectOf(PropTypes.node) | An object mapping an HTML element type to anything React can render (numbers, strings, elements, etc.). |
| componentOverrides | PropTypes.objectOf(PropTypes.func)` | An object mapping an HTML element type to a function that returns anything React can render. See Component overrides. |- [markdown-react-renderer][markdown-react-renderer]
[html-react-parser]: https://github.com/remarkablemark/html-react-parser
[markdown-react-renderer]: https://github.com/asyarb/markdown-react-renderer