mirror of
https://github.com/zhigang1992/react-navigation.git
synced 2026-03-06 17:34:59 +08:00
Update router guide (#1207)
This commit is contained in:
committed by
Eric Vicenti
parent
6b8cb793b4
commit
be09d50f22
@@ -40,28 +40,26 @@ const MyApp = StackNavigator({
|
||||
}, {
|
||||
initialRouteName: 'Home',
|
||||
})
|
||||
MyApp.router = {
|
||||
...MyApp.router,
|
||||
getStateForAction(action, state) {
|
||||
if (state && action.type === 'PushTwoProfiles') {
|
||||
const routes = [
|
||||
...state.routes,
|
||||
{key: 'A', routeName: 'Profile', params: { name: action.name1 }},
|
||||
{key: 'B', routeName: 'Profile', params: { name: action.name2 }},
|
||||
];
|
||||
return {
|
||||
...state,
|
||||
routes,
|
||||
index: routes.length - 1,
|
||||
};
|
||||
}
|
||||
return MyApp.router.getStateForAction(action, state);
|
||||
},
|
||||
|
||||
const defaultGetStateForAction = MyApp.router.getStateForAction;
|
||||
|
||||
MyApp.router.getStateForAction = (action, state) => {
|
||||
if (state && action.type === 'PushTwoProfiles') {
|
||||
const routes = [
|
||||
...state.routes,
|
||||
{key: 'A', routeName: 'Profile', params: { name: action.name1 }},
|
||||
{key: 'B', routeName: 'Profile', params: { name: action.name2 }},
|
||||
];
|
||||
return {
|
||||
...state,
|
||||
routes,
|
||||
index: routes.length - 1,
|
||||
};
|
||||
}
|
||||
return defaultGetStateForAction(action, state);
|
||||
};
|
||||
```
|
||||
|
||||
|
||||
|
||||
### Blocking Navigation Actions
|
||||
|
||||
Sometimes you may want to prevent some navigation activity, depending on your route.
|
||||
@@ -73,20 +71,21 @@ const MyStackRouter = StackRouter({
|
||||
}, {
|
||||
initialRouteName: 'Home',
|
||||
})
|
||||
const MyAppRouter = {
|
||||
...MyStackRouter,
|
||||
getStateForAction(action, state) {
|
||||
if (
|
||||
state &&
|
||||
action.type === NavigationActions.BACK &&
|
||||
state.routes[state.index].params.isEditing
|
||||
) {
|
||||
// Returning null from getStateForAction means that the action
|
||||
// has been handled/blocked, but there is not a new state
|
||||
return null;
|
||||
}
|
||||
return MyStackRouter.getStateForAction(action, state);
|
||||
},
|
||||
|
||||
const defaultGetStateForAction = MyStackRouter.router.getStateForAction;
|
||||
|
||||
MyStackRouter.router.getStateForAction = (action, state) => {
|
||||
if (
|
||||
state &&
|
||||
action.type === NavigationActions.BACK &&
|
||||
state.routes[state.index].params.isEditing
|
||||
) {
|
||||
// Returning null from getStateForAction means that the action
|
||||
// has been handled/blocked, but there is not a new state
|
||||
return null;
|
||||
}
|
||||
|
||||
return defaultGetStateForAction(action, state);
|
||||
};
|
||||
```
|
||||
|
||||
@@ -105,7 +104,8 @@ const MyApp = StackNavigator({
|
||||
}, {
|
||||
initialRouteName: 'Home',
|
||||
})
|
||||
const previousGetActionForPathAndParams = MyApp.router.getActionForPathAndParams
|
||||
const previousGetActionForPathAndParams = MyApp.router.getActionForPathAndParams;
|
||||
|
||||
Object.assign(MyApp.router, {
|
||||
getActionForPathAndParams(path, params) {
|
||||
if (
|
||||
|
||||
Reference in New Issue
Block a user