Реагируйте на встроенную навигацию - компонент не будет размонтирован даже после использования stackactions.reset - PullRequest
1 голос
/ 02 апреля 2020

Я использую реагировать нативно с реакции-навигации v4

У меня есть домашний экран и экран приветствия. Я использую приставку для хранения пользователя, вошедшего в систему. На экране приветствия (перед тем, как пользователь войдет в систему) я сбрасываю пользователя на ноль, например:

useEffect(() => {
    dispatch(updateCurrentUser(null));
  });

На домашнем экране (после пользователь входит в систему), я перехожу к экрану приветствия с помощью кнопки выхода следующим образом:

      <Button
          title="Logout"
          onPress={() => {
            const resetAction = StackActions.reset({
              index: 0,
              actions: [
                NavigationActions.navigate({routeName: "Welcome"}),
              ]
            });
            props.navigation.dispatch(resetAction);
            // navigationData.navigation.pop();
            // navigationData.navigation.navigate({routeName: "Welcome"});
          }}
        />

После этого я получаю сообщение об ошибке всякий раз, когда нажимаю кнопку выхода из системы

, так как пользователь теперь имеет значение null, и на главном экране у меня есть следующий код <Text style={styles.text}>Welcome, {currentUser.username}!</Text>, я получаю сообщение об ошибке, что null не имеет атрибута username, поскольку currentUser теперь имеет значение null.

Я не понимаю, почему домашний экран не размонтируется и отображается после сброса стека и перехода к экрану приветствия. В чем может быть проблема здесь?

1 Ответ

1 голос
/ 02 апреля 2020

Вы можете просто оставить stackaction и использовать switchnavigator и поместить эти два экрана в отдельные стеки. как

export default createAppContainer(createSwitchNavigator(
{
    stack1:ScreenStack1,
    App: AppTabs,
},
{
    initialRouteName: 'AuthLoading',
}

));

, так что если я буду navigation.navigate("App") из stack1 и в какой-то момент, если я go вернусь в stack1 из приложения navigation.navigate("stack1"), то теперь все экраны stack1 будут вести себя как рендеринг fre sh.

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