Security News
pnpm 10.0.0 Blocks Lifecycle Scripts by Default
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.
react-html-renderer
Advanced tools
React component that renders an HTML string as a React component tree
React component that renders an HTML string as a React component tree.
Note: This component uses html-react-parser
under the
hood but makes no promises about changing the underlying library in a future
release.
npm install --save react-html-renderer
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 = `
<h1>React</h1>
<h2>A JavaScript library for building user interfaces</h2>
<p>
<a href="#">Get Started</a>
</p>
`
// Note that default props can be set using the following pattern:
//
// `props => <Comp foo="bar" {...props} />`
//
const App = () => (
<HTMLRenderer
html={html}
components={{
h1: props => <Heading color="red" {...props} />,
h2: Subheading,
a: Link,
}}
/>
)
HTMLRenderer
will render something that looks like the following:
;[
<Heading color="red">React</Heading>,
<Subheading>A JavaScript library for building user interfaces</Subheading>,
<p>
<Link to="#">Get Started</Link>
</p>,
]
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.
// src/components/HTML.js
import { Heading, Subheading, Link } from 'src/components'
export const HTML = props => (
<HTMLRenderer
components={{
h1: props => <Heading color="red" {...props} />,
}}
{...props}
/>
)
The HTML
component could be used by passing it an HTML string.
// src/pages/index.js
import { HTML } from 'src/components'
export const IndexPage = ({ html }) => <HTML html={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.
// src/pages/index.js
import { HTML } from 'src/components'
export const IndexPage = ({ html }) => (
<HTML
html={html}
componentOverrides={{
h1: Comp => props => <Comp {...props} color="blue" />,
}}
/>
)
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.
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. |
FAQs
React component that renders an HTML string as a React component tree
The npm package react-html-renderer receives a total of 1,899 weekly downloads. As such, react-html-renderer popularity was classified as popular.
We found that react-html-renderer demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.
Product
Socket now supports uv.lock files to ensure consistent, secure dependency resolution for Python projects and enhance supply chain security.
Research
Security News
Socket researchers have discovered multiple malicious npm packages targeting Solana private keys, abusing Gmail to exfiltrate the data and drain Solana wallets.