Невозможно перейти на другой экран с помощью navigation.navigate. - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть класс Login с функцией:

  async _logInWithFacebook() {
    await Facebook.initializeAsync(fbConfig.APP_ID);
    const { type, token } = await Facebook.logInWithReadPermissionsAsync(
      fbConfig.APP_ID,
      {
        permissions: ["public-profile", "email"],
      }
    );
    if (type === "success") {
      this.props.login(token, "facebook");
      this.props.navigation.navigate("Home");
    } else {
      throw new Error("Something wrong with facebook auth");
    }
  }

Я вызываю его, когда нажимаю кнопку входа в систему. Также у меня есть класс HomeScreen, куда я хочу перейти после нажатия кнопки.

class HomeScreen extends Component {
  componentDidMount() {
    this.props.fetchMyMeetups();
  }
  render() {
    const {
      myMeetups: { isFetched, data, error },
    } = this.props;
    return (
      <View style={styles.root}>
        <View style={styles.header}>
          <View style={styles.add}>
            <CreateMeetupScreen />
          </View>
        </View>
        <View style={styles.topContainer}>
          <Text>HomeScreen</Text>
        </View>
        <View style={styles.bottomContainer}>
          <MyMeetupsList meetups={data} />
        </View>
      </View>
    );
  }
}
export default HomeScreen;

И мой навигатор:

export function Navigator() {
  return (
    <NavigationContainer>
      <Stack.Navigator initialRouteName="Login">
        <Stack.Screen name="Login" component={LoginScreen} />
        <Stack.Screen name="Home" component={HomeScreen} />
      </Stack.Navigator>
    </NavigationContainer>
  );

Поэтому, когда я нажимаю кнопку, я получаю сообщение об ошибке: [Отклонение необработанного обещания: TypeError: undefined не является объектом (оценивает '_ref. навигации ')]

1 Ответ

2 голосов
/ 19 апреля 2020

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

this.props.navigation.navigate("Home",{SOME PROPS HERE});

тогда вы сможете получить его на следующей странице и использовать его. Надеюсь, это поможет <3 </p>

...