如何在React Navigation v2.18中从非常嵌套的导航器重置导航?

时间:2018-11-06 13:52:00

标签: react-native react-navigation

环境

反应导航:2.18.1 博览会SDK:30 纱:1.9.4 节点:9.10.0

问题

我有一个带有主要bottomTabNavigator的应用程序,其中包含其他4个导航器。这些导航器中的一些也具有其他导航器。这是一个试图更好解释的图:

diagram

用户可以同时从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中:

problem

感谢您的帮助。

0 个答案:

没有答案