<Ejsx />
Experimental Node.js module and CLI to use JSX as a templating language for static HTML
Usage
Be sure you have Node v6 installed https://nodejs.org
npm install -g ejsx
Create a folder that will contain JSX template files.
Create a Root JSX template file. These βJSX templateβ files should not contain any wrapping JavaScript β only JSX syntax.
Root.jsx
<html>
<h1>Hello</h1>
</html>
Run the ejsx command and write the output to an HTML file.
ejsx components > index.html
Create Components
To create reusable components, add files to the folder that begin with a capital letter and have the .jsx
file extension.
This is an example Header
component. Components have access to the props
passed in from their parent.
Header.jsx
<header>
<h1>{props.title}</h1>
</header>
Root.jsx
<html>
<Header title='Hello component' />
</html>
Passing Props
To pass props to the Root component, create a JSON file and pass the name of that file as an argument to the CLI.
data.json
{
"title": "Hello"
}
ejsx components --props data.json > index.html
Loops
Looping over arrays is done using the array map()
method.
Each child in an array must also have a key
prop to be properly tracked.
<ul>
{props.items.map((item, i) => (
<li key={i}>
{item}
</li>
))}
<ul>
Conditionals
If statements will not work in JSX, but ternary operators can be used instead.
<div>
{props.foo % 2 ? <span>Odd</span> : <span>Even</span>}
</div>
You can also skip rendering is a value is falsy.
<div>
{true && <div>Visible</div>}
{false && <div>Hidden</div>}
{props.foo && <div>Hidden when props.foo is falsy</div>}
</div>
See the docs
folder for a complete example.
Motivations
React is a very powerful tool that can completely replace the need for traditional templating systems, but can be daunting to designers or others who aren't as familiar with JavaScript or Node.js. This is meant to be an extremely simple way to use JSX and basic components to render static HTML, without the need to use JavaScript.
This might be good as a soft introduction to some of the concepts in React, especially related to code reuse, component encapsulation, and styling in React.
About JSX
MIT License