Skip to content

Convert a string containing html tags to an array of React elements. Light and secure

License

Notifications You must be signed in to change notification settings

thomasthiebaud/htmlstring-to-react

Folders and files

NameName
Last commit message
Last commit date

Latest commit

2f42d07 · Dec 8, 2024
Dec 8, 2024
Apr 4, 2022
Dec 8, 2024
Dec 8, 2024
Jul 7, 2018
Jul 7, 2018
Dec 8, 2024
May 24, 2019
May 12, 2021
May 12, 2021
Dec 8, 2024
Jul 7, 2018
Aug 31, 2018
Dec 8, 2024
Dec 8, 2024
Dec 8, 2024
Mar 30, 2019

Repository files navigation

htmlstring-to-react

Why ?

This module provide an easy way to parse a string containing html elements to an array of React elements. It tries to focus to security (using DOMPurify) and keeping the bundle as small as possible

It is heavily inspired by html2react and html-react-parser

How to install ?

npm install htmlstring-to-react
// or
yarn add htmlstring-to-react

How to use ?

Simple example

import { parse } from 'htmlstring-to-react'
parse('<em key="1"><b key="2">It\' is working</b></em>')

Add an override

You can use css selectors to override an element

import { parse } from 'htmlstring-to-react'
parse('<b key="1">It</b> is <b key="2">working</b>', {
  overrides: {
    b: (props, textContent) => <b onClick={console.log('Click')}>{textContent}</b>
  },
})

All valid css selectors works

import { parse } from 'htmlstring-to-react'
parse('<b key="1">It</b> is <b key="2" class="active">working</b>', {
  overrides: {
    'b.active': (props, textContent) => <b onClick={console.log('Click')}>{textContent}</b>
  },
})

IMPORTANT Overrides do not support nested elements in the current stage, so this code

import { parse } from 'htmlstring-to-react'
parse('<b key="1"><b key="2">It is working</b></b>', {
  overrides: {
    b: (props, textContent) => <b onClick={console.log('Click')}>{textContent}</b>
  },
})

will drop the inner b but keep the textContent

Change dom parsing configuration

By default, we are sanitizing the html input using DOMPurify module. You can override the configuration we are using

import { parse } from 'htmlstring-to-react'
parse('<b key="1">It</b> is <b key="2" class="active">working</b>', {
  dom: {
    ADD_TAG: ['script']
  },
})

IMPORTANT You cannot override RETURN_DOM, RETURN_DOM_FRAGMENT and RETURN_DOM_IMPORT because they are used internaly by the library.

Other options

  • useFragment (default false): Return a Fragment instead of an array.
  • useAsKey (default ['key']): Ordered list of attributes to use as a key. Use the first one that matches or null

How to contribute ?

This repo enforce commit style so the release process is automatic. Commits must look like:

<SUBJECT>: Message starting with an uppercase

where SUBJECT is one of: Fix, Update, New, Breaking, Docs, Build, Upgrade, Chore

Found a problem ?

Please open an issue or submit a PR, I will be more than happy to help