pure-jsx
TypeScript icon, indicating that this package has built-in type declarations

3.2.0 • Public • Published

Pure JSX

This is an opinionated helper around React that will allow you to have pure JSX files, beginning with any tag (e.g. <div>). React import, and other dependency injection mechanisms, as well as a middle class between your component class and React.Component is provided.

There is a built-in loader for WebPack, for the pure JSX files suffixed .jsx.

In the view, you have access to a context which can contain any data. This is accompanied by a "query" object in WebPack. You also have access to state and props without needing to prepend this.. The constructor is available as $, so that static class members are referenced as $.member. This is useful to inject dependent sub-components.

Usage

The component logic

import PureJsx from 'pure-jsx'
import view from './view.jsx'
 
// This should be the same for the entire app, and is reached from all views
const appContext = { app: 'hello world' };
 
export default class MyComponent extends PureJsx
{
    constructor( props )
    {
        super( props, view, appContext );
 
        this.state = { value: "example" };
    }
}

The view

All properties in the context (above) will be exposed, if accompanied with the corresponding WebPack loader query (below).

<div>{ app }: { state.value }</div>

The WebPack loader

You specify the context variables in the query object for the pure-jsx/loader.

module: {
    loaders: [
        {
            test    : /\.jsx$/,
            include : "./app", // Your app root
            // Use webpack-combine-loaders to use this together with babel
            loader  : webpackCombineLoaders( [
                // Your choice of babel presets, if at all
                {
                    loader  : 'babel-loader',
                    query   : {
                        cacheDirectory: true,
                        presets: [ 'react', 'es2015', 'stage-1' ]
                    }
                },
                {
                    loader: 'pure-jsx/loader',
                    query   : {
                        strict   : true, // Will prepend 'use strict'
                        contexts : [ 'app' ] // Your context variables
                    }
                }
            ] )
        }
    ]
}

HOC (Higher-Order Component)

PureJSX can return a HOC of any component, e.g. if you want it to subclass a custom class (or React.PureComponent). To do this, use the provided hoc function:

import { hoc }           from 'pure-jsx'
import { PureComponent } from 'react'
 
import view from './view.jsx'
 
// This should be the same for the entire app, and is reached from all views
const appContext = { app: 'hello world' };
 
export default class MyComponent extends hoc( PureComponent )
{
    constructor( props )
    {
        super( props, view, appContext );
 
        this.state = { value: "example" };
    }
}

Dependents (0)

Package Sidebar

Install

npm i pure-jsx

Weekly Downloads

11

Version

3.2.0

License

MIT

Unpacked Size

18.6 kB

Total Files

10

Last publish

Collaborators

  • grantila