как использовать реагирующую навигацию внутри оповещения при нажатии?

я использую реагирующую навигацию v5,

я пытаюсь перейти к экрану входа в систему из предупреждения, когда пользователь нажимает «ОК», но в настоящее время не работает с ошибкой >>

не могу найти переменную: навигация

Функция ниже:

async function handleSubmit(navigation) {
  try {
    const value = await AsyncStorage.getItem('storage_useremail');
    if (value !== null) {
      fetch('https://xxxxxx/logout', {
        method: 'POST',
        headers: {
          Accept: 'application/json',
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({
          email: value,
        }),
      }).then(res => res.json())
        .then(res => {
          // console.log(res.err_code)
          if (res.err_code == '0000') {
 	    Alert.alert('Notice',res.message + " (" + res.err_code + ")",[{ text: 'Yes', onPress: () => navigation.navigate('Login')} ]);
          } else {
            Alert.alert("Response:  " + res.err_code + " - " + res.message);
          }
        })
    }
  } catch (error) {
    // Error retrieving data
  }
}



function HomeNavigator() {
  return (
<AppStack.Navigator mode="modal" initialRouteName="Login" screenOptions={({ route, navigation }) => ({
  headerStyle: {
    backgroundColor: '#fb5b5a',
    borderBottomWidth: 0,
  },
  headerRight: () => (
    <Button
      onPress={() => handleSubmit()}
      // onPress={() => navigation.navigate('Login')}
      title="Logout"
      color="#fff"
    />
  ),
})}>
  <AppStack.Screen
    name="Home"
    component={HomeScreen}
    options={{
      title: 'Home',
    }}
  />
  <AppStack.Screen
    name="Memory"
    component={MemoryScreen}
    options={{
      title: 'Memory',
    }} />
</AppStack.Navigator>
  );
}

navigation.navigate('Login') ‹‹ это та часть, в которой невозможно перемещаться.

Может ли кто-нибудь помочь в этом?

Спасибо перед


person abet    schedule 05.06.2020    source источник
comment
Где вы использовали handleSubmit и передали ему navigation?   -  person Tony Nguyen    schedule 05.06.2020
comment
привет я вставил в шапку правильно. позвольте мне обновить код выше. Благодарность   -  person abet    schedule 06.06.2020
comment
Вы не передали функцию navigation функции handleSubmit. Вы можете получить его из ``headerRight: (navigation) ....`, а затем передать его handleSubmit(navigation)   -  person Tony Nguyen    schedule 06.06.2020


Ответы (2)


Потому что вы не передаете навигацию в handleSubmit

function HomeNavigator() {
  return (
<AppStack.Navigator mode="modal" initialRouteName="Login" screenOptions={({ route, navigation }) => ({
  headerStyle: {
    backgroundColor: '#fb5b5a',
    borderBottomWidth: 0,
  },
  headerRight: () => (
    <Button
      onPress={() => handleSubmit(navigation)} // <<<<<<<<<<<< Here
      // onPress={() => navigation.navigate('Login')}
      title="Logout"
      color="#fff"
    />
  ),
})}>
  <AppStack.Screen
    name="Home"
    component={HomeScreen}
    options={{
      title: 'Home',
    }}
  />
  <AppStack.Screen
    name="Memory"
    component={MemoryScreen}
    options={{
      title: 'Memory',
    }} />
</AppStack.Navigator>
  );
}
person Anhdevit    schedule 06.06.2020

onPress должно быть объявлением функции, которая будет запускаться при нажатии.

onPress: () => navigation.navigate('Login')
person strdr4605    schedule 05.06.2020
comment
если изменить на: Alert.alert('Notice',res.message + ( + res.err_code +),[{ text: 'Yes', onPress: () =› navigation.navigate('Login')} ]); [Отклонение необработанного обещания: TypeError: undefined не является объектом (оценка 'navigation.navigate')] - person abet; 06.06.2020