React Native Routy
Using Navigator with Redux, and keep everything in store.
Install
npm install --save react-native-routy
Setup
Reducer
import {reducer as routyReducer} from 'routy'
export default combineReducers({
routes: routyReducer([{page: 'Home'}])
})
by default, you should mount this reducer in routes
of your root reducer, but you customize this too.
Component
import {Route} from 'routy'
<Route
routyMountPoint="routes"
renderScene={ (route) => {
return createElement(Pages[route.page], route)
}}
/>
Actions
import {actions as routyAction} from 'routy'
...
export default connect(null, (dispatch) => ({
pushToEvent: () => dispatch(routyAction.pushRoute({page: 'Events'})),
pop: () => dispatch(routyAction.pop())
}))
Multiple Routes
This component also support having multiple router instances, here is how:
Reducer
import {reducer as routyReducer} from 'routy'
export default combineReducers({
routes: combineReducers({
home: routyReducer([{page: 'Home'}], 'home'),
settings: routyReducer([{page: 'Settings'}], 'settings'),
main: routyReducer([{page: 'Main'}], 'settings'),
})
})
Component
import {Route} from 'routy'
<Tab>
<TabItem>
<Route
routyGroup="home" // same key in reducer
renderScene={ (route) => {
//you're in charge of creating your pages from route
return createElement(Pages[route.page], route)
}}
/>
</TabItem>
<TabItem>
<Route
routyGroup="settings"
renderScene={ (route) => {
return createElement(Pages[route.page], route)
}}
/>
</TabItem>
<TabItem>
<Route
routyGroup="home" // same key in reducer
renderScene={ (route) => {
return createElement(Pages[route.page], route)
}}
/>
</TabItem>
</Tab>
Actions
import {actions as routyAction} from 'routy'
...
export default connect(null, (dispatch) => ({
pushToEvent: () => dispatch(routyAction.pushRoute({page: 'Events'}, 'home')),
pop: () => dispatch(routyAction.pop('home'))
}))