@smikhalevski/react-html-rendererdeprecated

Renders HTML source as React nodes using customizable element renderer.

Usage no npm install needed!

<script type="module">
  import smikhalevskiReactHtmlRenderer from 'https://cdn.skypack.dev/@smikhalevski/react-html-renderer';
</script>

README

react-html-renderer build

Renders HTML source as React nodes using customizable element renderer.

npm install --save-prod @smikhalevski/react-html-renderer

Usage

Render an HTML as React nodes.

import {HtmlRenderer} from '@smikhalevski/react-html-renderer';

const MyComponent = () => (
    <HtmlRenderer value={'<b>Hello</b>, world'}/>
);
// → <><b>Hello</b>, world</>

Use the custom element renderer.

import {ElementRenderer, HtmlRenderer} from '@smikhalevski/react-html-renderer';

const elementRenderer: ElementRenderer = (tagName) => {
  // Tag names are lower cased
  if (tagName === 'bear') {
    return <strong>{'Bonjour'}</strong>;
  }
  // Forest tag is ignored
};

const MyComponent = () => (
    <HtmlRenderer
        value={'<Bear><Forest>'}
        elementRenderer={elementRenderer}
    />
);
// → <strong>Bonjour</strong>

Use customized DOM parser.

In this example we are going to initialize a parser that recognizes custom HTML entities.

Have a look at TagSoup and speedy-entities for more details on configuration.

import {DomParserContext, ElementRenderer, HtmlRenderer} from '@smikhalevski/react-html-renderer';
import {createEntityDecoder, createEntityManager} from 'speedy-entities';
import {createHtmlDomParser, domHandler} from 'tag-soup';

const entityManager = createEntityManager();

entityManager.set('wtfisthis', 'This is Sparta');

const parser = createHtmlDomParser(domHandler, {
  decodeText: createEntityDecoder(entityManager),
});

const result = render(
    <DomParserContext.Provider value={parser}>
      <HtmlRenderer value={'&wtfisthis;'}/>
    </DomParserContext.Provider>
);
// → <>This is Sparta</>