Как сбросить навигацию с очень вложенного навигатора в реагирующей навигации v2.18? - PullRequest
0 голосов
/ 06 ноября 2018

Окружающая среда

реакция-навигация: 2.18.1 Экспо-SDK: 30 пряжа: 1.9.4 узел: 9.10.0

Проблема

У меня есть приложение с основным bottomTabNavigator, которое содержит 4 других навигатора. Некоторые из этих навигаторов также имеют другие навигаторы. Вот диаграмма, чтобы попытаться объяснить лучше:

diagram

Пользователь может выполнить вход из стека D и стека F, и когда это произойдет, мне нужно сбросить состояние и размонтировать любой экран в другом swithNavigator.

Я прочитал документы и попытался использовать метод getStateForAction внутри моего TabNavigator (поскольку он является большим родителем).

Вот что я сделал:

//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
          });

При этом я сбрасываю только текущий переключатель Navigator, но с другим ничего не происходит. И, глядя на состояние, которое я получаю на getStateForAction, я вижу, что индекс для switchNavigator правильно изменен. Разве экран не должен отключаться, когда это происходит?

Я не нашел ничего в документах или Интернете, связанных с этим. Также никто не мог ответить на это на Discord.

Я также создал закуски: https://snack.expo.io/@baladapp/navigation_error

шаги по воспроизведению проблемы показаны в GIF ниже:

problem

Любая помощь приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...