使用React-Navigtion和Redux返回(重置)初始状态的正确方法是什么。
这是我的初始状态:
const firstAction = AppNavigator.router.getActionForPathAndParams('HomeDrawer');
const tempNavState = AppNavigator.router.getStateForAction(firstAction);
const secondAction = AppNavigator.router.getActionForPathAndParams('Login');
const INITIAL_STATE = AppNavigator.router.getStateForAction( secondAction, tempNavState );
这是我的减速机:
export default (state = INITIAL_STATE, action) => {
let nextState;
switch (action.type) {
case 'LOGIN':
nextState = AppNavigator.router.getStateForAction(NavigationActions.back()), state);
break;
case 'LOGOUT_TEMP':
nextState = AppNavigator.router.getStateForAction(NavigationActions.navigate({ routeName: 'Login' }), state);
break;
case 'LOGOUT_START':
// Don't know exactly what to do here
nextState = { ...INITIAL_STATE };
break;
default:
nextState = AppNavigator.router.getStateForAction(action, state);
break;
}
return nextState || { ...state };
};
我不确定这是否有效。我不明白React-Navigation如何在幕后处理这个问题。它是否会听取这种类型的状态更改并正确导航,还是需要始终通过getStateForAction(NavigationActions.something(...),state)运行操作?
nextState = { ...INITIAL_STATE };
我之前没有使用Redux时已经这样做了:
const resetLogin = NavigationActions.reset({
index: 1,
actions: [
NavigationActions.navigate({ routeName: "HomeDrawer" }),
NavigationActions.navigate({ routeName: "Login" })
]
});
我是否按上述方法执行以下操作?
nextState = AppNavigator.router.getStateForAction(resetLogin, state);
如何将React-Navigation重置为Redux初始状态,我可以使用上面的const INITIAL_STATE以某种方式执行此操作吗?
谢谢,
沃伦贝尔答案 0 :(得分:2)
const resetLogin = NavigationActions.reset({
index: 1,
actions: [
NavigationActions.navigate({ routeName: "HomeDrawer" }),
NavigationActions.navigate({ routeName: "Login" })
]
});
然后在我的reducer中执行此操作:
nextState = AppNavigator.router.getStateForAction(resetLogin, state)
我还发现使用:
AppNavigator.router.getActionForPathAndParams('ScreenName');
如果'ScreenName'是DrawerNavigator中的屏幕,不会得到正确的redux动作。使用以下内容可以获得正确的redux操作:
NavigationActions.navigate({ routeName: 'ScreenName' })
希望这有助于其他人。
谢谢,
沃伦贝尔