反应导航:2.18.1 博览会SDK:30 纱:1.9.4 节点:9.10.0
问题
我有一个带有主要bottomTabNavigator的应用程序,其中包含其他4个导航器。这些导航器中的一些也具有其他导航器。这是一个试图更好解释的图:
用户可以同时从Stack D和Stack F进行登录,并且发生这种情况时,我需要重置状态并卸载其他swithNavigator中的任何屏幕。
我阅读了文档,并尝试在TabNavigator中使用getStateForAction方法(因为它是父级)。
这是我所做的:
//TabNavigator.js
export default navigator;
const defaultGetStateForAction = navigator.router.getStateForAction;
navigator.router.getStateForAction = (action, state) => {
console.log(action, state);
if (
(state && action.type === LOGIN_PERFIL) ||
action.type === LOGIN_INGRESSOS
) {
let routes = [...state.routes];
routes[2].index = 0;
routes[3].index = 0;
console.log(JSON.stringify(routes));
return {
...state,
routes
};
}
return defaultGetStateForAction(action, state);
};
And on my LoginScreen I do:
this.props.navigation.navigate("StackE"); //or StackC
this.props.navigation.dispatch({
type: LOGIN_PERFIL
});
通过此操作,我仅重置了当前的开关导航器,但另一个没有任何反应。并查看getStateForAction的状态,我发现switchNavigator的索引已正确更改。发生这种情况时,屏幕是否应该卸载?
我在文档或网络上未找到与此相关的任何内容。同样,没人能回答不和谐的问题。
我还制作了一种小吃:https://snack.expo.io/@baladapp/navigation_error
重现该问题的步骤显示在下面的GIF中:
感谢您的帮助。