rechannel
v0.10.0
Published
Opinionated glue for building web apps with `React` and `Redux`.
Downloads
15
Maintainers
Readme
rechannel
Opinionated glue for building web apps with React and Redux.
Glues together react, redux, react-router, react-router-redux, redial and redux-devtools-extension.
Useful for both client side and UniversalJS apps.
This package is experimental and the API may receive breaking changes before v1.0.0.
Installation
npm install --save rechannel react react-dom react-redux \
react-router react-router-redux redial reduxUsage
Client
import rechannel from 'rechannel';
import routes from './routes';
import reducer from './reducer';
//creates a store, sets up the router, pre-fetches the necessary data
// and renders the page
rechannel({
routes,
reducer
});
Note: If you're not using a server you'll have to create your own HTML file.
Try the example.
Server
import express from 'express';
import rechannel from 'rechannel';
import routes from './routes';
import reducer from './reducer';
const app = express();
app.use('/', express.static(`./public`));
//returns a middleware function that creates a store, sets up the router, pre-fetches necessary data
// and renders the page
app.use(rechannel({
routes,
reducer
}));
const server = app.listen(8000, () => {
const host = server.address().address;
const port = server.address().port;
console.log('App running at http://%s:%s', host, port);
});
Try the example.
API
rechannel(options : object)Create a store, set up the router, pre-fetch necessary data and render the page.
Options:
Common options:
routes : Element|functionRequired. A<Route/>element or a function creating a<Route/>element. Function are passed thegetState()anddispatch()methods from the redux store (useful for restricting access in aonEnterhook). Learn more about configuring routes in the React Router docs.reducer : objectRequired. A keyed object of reducer functions that may be passed tocombineReducers(). Learn more about reducer functions in the Redux docs.middleware : array<function>Optional. An array of middleware functions. Learn more about middleware functions in the Redux docs.enhancer : array<function>Optional. An array of enhancer functions. Learn more about enhancer functions in the Redux docs.history : HistoryOptional. A history instance. Default's toreact-router'sbrowserHistoryon the client and the result ofreact-router'screateMemoryHistoryon the server. Learn more about history objects in thereact-routerHistories docs.
Hooks:
$init : functionOptional. Called after the redux store is initialised. May return a promise.$load : functionOptional. Called after any data is (pre-)loaded. May return a promise.
Client specific options:
element : HTMLElementOptional. TheHTMLElementwhich React will render into. Defaults todocument.querySelector('#app').
Server specific options:
html : ComponentOptional. A component that renders the root HTML. Passed the Reduxstateand the React Router component(s) aschildrenviaprops. Defaults to this component.send : function(res, html)Optional. A function that allows customisation of the response sent by the server. Passed the response object and a HTML string.
Returns:
Returns nothing on the client. Returns an express middleware function on the server.
Note: On the client, routes aren't re-created for each time you navigate to a new page, if you're using a factory function to create the routes and utilising the cookies or query parameters,
the routes won't be re-created with the new query or cookie values. The route factory function will only be re-evaluated when you re-load the page.
createHtml(options : object)Create a React component for rendering <html> on the server.
Options:
title : string|functionscript : string|Array<string>style : string|Array<string>
Returns:
Returns a React component for rendering <html> on the server.
Change log
0.10.0
- add: support server rendered async routes as per https://github.com/ReactTraining/react-router/blob/master/docs/guides/ServerRendering.md#async-routes
0.9.0
- add: added
headersas a parameter for all hooks - add: now passing
query,cookiesandheadersto yourHtmlcomponent
0.8.0
- add: added the ability to provide a custom
historyobject - add: added
redux-immutable-state-invariantto non-production builds which trigger an error when the redux state has been mutated - add: added validation around some of the
optionsto assist developers in finding problems earlier
0.7.0
- add: added a
queryparameter to the$init,$loadandfetchhooks
0.6.2-3
- fix: fixed a bug where routes weren't being re-created per request so conditional routing resulted in outcomes
0.6.0
- add: added
$init()and$load()hooks
0.5.0
- add: allow routes to be a function
0.4.2
- fix: add keyword metadata
0.4.1
- fix:
createHtml()parametersscriptandstyleneed to be cast to arrays
0.4.0
- add:
createHtml()parametersscriptandstylenow accept an array of script and style files
0.3.0
- break: turned the
Htmlcomponent into a factory function to allow customisation of the<html>title, script and style names
To do
- write tests
- rename
fetchtrigger toload - allow the
reducerto be a single reducer function - allow the
middlewareandenhancerparameters to be a function call that receives thereqin order to be configured e.g.redux-effects-cookie - clean-up
localspassed toredial- allow them to be user configurable
