Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Converts HTML pages into React components

License

NotificationsYou must be signed in to change notification settings

ProReactJS/html-to-react-components

 
 

Repository files navigation

Logo

Extract annotated portions of HTML into React components as separate modules. The structure of HTML is preserved by importing child components and replacing appropriate pieces of HTML with them. As a result you get an entire components tree ready to be rendered.

Try inonline REPL

usage example animation

Contents

When to use it

This utility was designed to free React developers from a boring task of translating HTML into components.

Imagine you just got a pile of HTML from your designers. The first thing you will do is break HTML into React components. This is boring and should be automated!

Installation

$ npm i -g html-to-react-components

Usage

HTML element withdata-component attribute will be converted into separate React components. The value of the attribute is the name of the React component.

Additionally specify which HTML attributes should be exposed as React props usingpublic: prefix.

<inputpublic:type="text"id="input"data-component="Input"/>
// at usage place<Inputtype="text"/>;// ----^^^^^^^^^^^// in component's moduleclassInputextendsReact.Component{render(){const{ type}=this.props;// <----return<inputtype={type}id="input"/>;// -----------^^^^^^^^^^^}}

See and runtest.js file for usage example and output.

CLI

$ html2react "./src/*.html"

You can also use any glob pattern to recursively generate the corresponding react file. Just make sure to use double quotes when specifying the pattern:

$ html2react "./src/**/*.html"

Options

componentType, --component, -c

Type of generated React components.

Values:

  • stateless
  • es5
  • es6 (default)

moduleType, --module, -m

Type of generated JavaScript modules.

Values:

  • es6 (default)
  • cjs (CommonJS)

moduleFileNameDelimiter, --delimiter, -d

Delimiter character to be used in modules filename.

If you don't specify a delimiter, or pass -d without a value, then the componentname in the HTML will be used unchanged as the filename. If you do specify adelimiter character, then the module name is broken into words, joined with thedelimiter and lower-cased.

output

Configuration options for output to file system.

path, --out, -o

Output directory path.

Default iscomponents directory in the current directory.

fileExtension, --ext, -e

Output files extension.

Default value isjs.

Node.js API

constextractReactComponents=require("html-to-react-components");extractReactComponents(`<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title>Document</title></head><body>  <header data-component="Header">    <h1 data-component="Heading">Hello, world!</h1>    <nav data-component="Nav">      <ul>        <li data-component="ListItem">#1</li>        <li data-component="ListItem">#2</li>      </ul>    </nav>  </header></body></html>`,{componentType:"stateless",moduleType:false});/*{ Header: 'const Header = () => <header className="header">\n\n    <Heading></Heading>\n\n    <Nav></Nav>\n\n  </header>;',  Heading: 'const Heading = () => <h1 className="heading">Hello, world!</h1>;',  Nav: 'const Nav = () => <nav className="nav">\n      <ul className="list">\n        <ListItem></ListItem>\n        <ListItem></ListItem>\n      </ul>\n    </nav>;',  ListItem: 'const ListItem = () => <li className="list-item">#2</li>;' }*/

Building for browser

When building for in-browser usage an env variableIN_BROWSER is required to be set at compile time in order to disable Node.js-specific modules. Note that code formatting is not included in in-browser bundle.

Example of defining a var in Webpack config:

plugins:[newwebpack.DefinePlugin({IN_BROWSER:JSON.stringify(true),}),],

Resources

A quickvideo demo on converting a simple HTML page into React components and rendering them into the same looking UI.

Annotating HTML in the editor is not the best experience, because you cannot see rendered UI itself. It's possible to annotate HTML using DevTools. Be aware that you'll have to spend time on copying and pasting markup from DevTools into files which will be processed.

usage example with DevTools animation

Ecosystem

  • extract-to-react is an extension for Chrome and Chromium browsers built on top ofhtml-to-react-components which allows you to extract HTML and CSS into React components and load them in CodePen or JSFiddle.

Contributing

If you spotted a bug, please, submit a pull request with a bug fix. If you would like to add a feature or change existing behaviour, open an issue and tell about what exactly you want to change/add.

License

MIT

About

Converts HTML pages into React components

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript96.9%
  • HTML3.1%

[8]ページ先頭

©2009-2025 Movatter.jp