rechannel v0.10.0
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
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago