Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

react-html-renderer

Package Overview
Dependencies
Maintainers
2
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

react-html-renderer

React component that renders an HTML string as a React component tree

  • 0.3.3
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
3.9K
decreased by-8.98%
Maintainers
2
Weekly downloads
 
Created
Source

react-html-renderer

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.

Status

npm version Build Status

Install

npm install --save react-html-renderer

Example

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>,
]

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.

// 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.

Props

NameTypeDescription
htmlPropTypes.stringHTML to render.
componentsPropTypes.objectOf(PropTypes.node)An object mapping an HTML element type to anything React can render (numbers, strings, elements, etc.).
componentOverridesPropTypes.objectOf(PropTypes.func)An object mapping an HTML element type to a function that returns anything React can render. See Component overrides.

Similar packages

Keywords

FAQs

Package last updated on 25 Oct 2021

Did you know?

Socket

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.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc