Render markup with deprecated attributes.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src
.babelrc
.gitignore
.npmignore
LICENSE
README.md
package.json
yarn.lock

README.md

Serialize Unsupported React Attributes

React does not support a bunch of deprecated HTML attributes that are still supported in the browser and are still widely used in HTML emails.

This list includes:

  • xmlns
  • align
  • valign
  • bgcolor
  • border

If you pass one of these to a JSX component. It will just drop them when it goes to render. This can be a pain. If you put your mind to it. You can inject these elements into React. Here is an example of what tha can look like. React will now include these properties when rendering to the DOM.

But guess what. If you want to any server-side rendering or just serialize your components to strings in the browser, ReactDOM will forget about these injected properties.

As a result, you end up with something like this:

import { renderToStaticMarkup } from 'react-dom/server';

renderToStaticMarkup(<div width="100%" border="0"></div>); // returns '<div width="100%"></div>';

Bummer. We silently lost the border attribute.

But, if you use this wonderful library, everything is preserved.

render(<div width="100%" border="0"></div>); // returns '<div width="100%" border="0"></div>';

How does this work?

Well, we traverse down the component tree and rename every unsupport tag—prefixing it with data-unsupported-attr-. Data attributes are kept in tact. We then render it usering ReactDOM and strip out all of the prefixes and we're good to go.