3.2.0 • Published 6 years ago

pure-jsx v3.2.0

Weekly downloads
2
License
MIT
Repository
github
Last release
6 years ago

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" };
    }
}
3.2.0

6 years ago

3.1.2

6 years ago

3.1.1

6 years ago

3.1.0

6 years ago

3.0.0

6 years ago

2.1.2

7 years ago

2.1.1

7 years ago

2.1.0

7 years ago

2.0.1

7 years ago

2.0.0

7 years ago

1.0.1

8 years ago

1.0.0

8 years ago