Окружающая среда
реакция-навигация: 2.18.1
Экспо-SDK: 30
пряжа: 1.9.4
узел: 9.10.0
Проблема
У меня есть приложение с основным bottomTabNavigator, которое содержит 4 других навигатора. Некоторые из этих навигаторов также имеют другие навигаторы. Вот диаграмма, чтобы попытаться объяснить лучше:
Пользователь может выполнить вход из стека 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 ниже:
Любая помощь приветствуется.