0.1.4 • Published 7 years ago
react-middleware-router v0.1.4
react-middleware-router
A middleware-based router for React.
Installation
npm install react-middleware-routerUsage
This router is designed to be a drop-in replacement for both react-router and if using redux react-router-redux.
Browser Routing
Here is an example of a small app:
const { BrowserRouter, Route, Switch } = require('react-middleware-router')
class App extends Component {
render() {
return (
<BrowserRouter history={history}>
<Switch errorComponent={NotFound} loadingComponent={Spinner}>
<Route path="/bar" middleware={[barware]} component={Bar} />
<Route path="/baz" middleware={[bazware]} component={Baz} />
<Route path="/foo" middleware={[fooware]} component={Foo} />
<Route exact path="/" component={Home} />
</Switch>
</BrowserRouter>
)
}
}Notice a few additions:
errorComponentis optionally supplied toSwitch. There is no need to create a "catch-all" route for errors.loadingComponentis optionally supplied toSwitch. This enables an app-wide loading/spinner component which is rendered until the route with middleware has completeing processing the middleware.middlewareis optionally supplied toRotue. This is an array of functions which run before thecomponentfor the route is rendered. If any middleware return an error theerrorComponentis rendered instead.
Browser Routing with Redux
const { ConnectedRouter, Route, Switch } = require('react-middleware-router')
const { Provider } = require('react-redux')
class App extends Component {
render() {
return (
<Provider store={store}>
<ConnectedRouter history={history}>
<Switch errorComponent={NotFound} loadingComponent={Spinner}>
<Route path="/bar" middleware={[barware]} component={Bar} />
<Route path="/baz" middleware={[bazware]} component={Baz} />
<Route path="/foo" middleware={[fooware]} component={Foo} />
<Route exact path="/" component={Home} />
</Switch>
</ConnectedRouter>
</Provider>
)
}
}Middleware
Here is an exampe of a middleware function:
function bazware(o, next) {
setTimeout(function() {
next()
}, 250)
}- The first argument, property
o, is the object that was optionally passed from a previous middleware. - The second argument, function
next, is the callback to tell the middleware it has completed (or errored). - The first argument to
nextis always an error ornull. - The second argument to
nextis the data you want to pass to the next middleware.
Passing data or errors to middleware
Data
next(null, {some: 'data'})
Error
next({some: 'error'})