React Navigator OnPress не срабатывает правильно - PullRequest
0 голосов
/ 14 мая 2019

Я использую реагирующую и реагирующую навигацию.Я создаю ящик с реагирующей навигацией, а затем внутри него, используя свой собственный формат.Я изо всех сил пытаюсь заставить мою кнопку выхода работать правильно.

Это прекрасно работает:

 <TouchableOpacity onPress={this.props.logoutUser()}>
     <Text style={{margin: 16,fontWeight: 'bold'}}>Logout</Text>
 </TouchableOpacity>

Но я хочу включить предупреждение и убедиться, что пользователь хочет выйти.Это не работаетОн выходит из системы пользователя / при следующем входе в приложение я вижу, что они вышли из системы, но не запускает обновление для моего приложения, пока я не обновлю его вручную.

    <TouchableOpacity onPress={()=>
          Alert.alert(
            'Log out',
            'Do you want to logout?',
            [
              {text: 'Cancel', onPress: () => {return null}},
              {text: 'Confirm', onPress: () => {
                this.props.logoutUser
              }},
            ],
            { cancelable: false }
          )  
        }>
        <Text style={{margin: 16,fontWeight: 'bold'}}>Logout</Text>
    </TouchableOpacity>

Для справкиВот как я отображаю экран входа в систему по сравнению с изменениями главной страницы (props.restoring) в зависимости от того, вошел ли пользователь в систему или нет.По какой-то причине он обновляется только при верхнем вызове. Мне интересно, влияет ли ящик или предупреждение на способ вызова функции:

const ChatAppComponent = props => {
  if (props.restoring) {
    return <ActivityIndicator style={styles.activityIndicator} />
  } else {
    if (props.logged) {
      return <DashboardNavigator />
    } else {
      return <AuthScreen />
    }
  }
}

РЕДАКТИРОВАТЬ: добавление в функцию выхода из системы

export const logoutUser = () => {
  return dispatch => {
    dispatch(sessionLoading());

    LoginManager.logOut();
    firebaseService
      .auth()
      .signOut()
      .then(async () => {
        await GoogleSignin.revokeAccess();
        await GoogleSignin.signOut();
        dispatch(sessionLogout());
      })
      .catch(error => {
        dispatch(sessionError(error.message));
      });
  };
};

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Эту функцию необходимо вызывать с использованием избыточности.

<TouchableOpacity onPress={()=>
   Alert.alert(
        'Log out',
        'Do you want to logout?',
        [
          {text: 'Cancel', onPress: () => {return null}},
          {text: 'Confirm', onPress: () => {
            this.props.dispatch(this.props.logoutUser()); //here
          }},
        ],
        { cancelable: false }
      )  
    }>
    <Text style={{margin: 16,fontWeight: 'bold'}}>Logout</Text>
</TouchableOpacity>

Поскольку функция выхода из системы является действием с избыточностью.

0 голосов
/ 18 мая 2019

Ответ связан с асинхронным ожиданием.Не уверен, почему он не работает с асинхронным ожиданием раньше, но мне пришлось перенести действие отправки выше методов Google.

firebaseService
          .auth()
          .signOut()
          .then(async () => {
            dispatch(sessionLogout());
            await GoogleSignin.revokeAccess();
            await GoogleSignin.signOut();
          })
...