Undefined не является объектом React Native StackNavigator

Я пытался заставить работать простой пример приложения React Native StackNavigation, но продолжаю получать

TypeError: undefined is not an object (evaluating 'this.props.navigation.navigate')

Я не ожидаю, что приложение будет перемещаться куда-либо на этом этапе, просто разверните его с панелью приложения и произвольным текстом.

import React, { Component } from 'react';
import {AppRegistry, Text} from 'react-native';
import {StackNavigator} from 'react-navigation';

export default class App extends React.Component {
  static navigationOptions = {
    title: 'Home',
  };

  render() {
    const { navigate } = this.props.navigation;
    return (
        <Text> Hello World </Text>
    );
  }
}

const appScreens = StackNavigator({
  Home: {screen: App},
})

AppRegistry.registerComponent('IntervalTimer', () => appScreens);

Ошибка сообщается в декларации const { navigate } = this.props.navigation;. И удаление этой строки позволяет приложению развернуться, но без заголовка, как я ожидал.

StackNavigator был установлен с использованием NPM и хорошо импортируется в приложение.

Есть похожие вопросы, и я попробовал их предложения. Цените любую помощь, которую вы можете предложить!

Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
1
0
1 571
2

Ответы 2

Вы можете добавить initialRouteName в опции StackNavigator. Попробуй это.

    import React, { Component } from 'react';
    import {AppRegistry, Text} from 'react-native';
    import {StackNavigator} from 'react-navigation';

    class App extends React.Component {
      static navigationOptions = {
        title: 'Home',
      };

      render() {
        const { navigate } = this.props.navigation;
        return (
            <Text> Hello World </Text>
        );
      }
    }

    export const appScreens = StackNavigator({
      Home: { screen: App }
    },{
      initialRouteName: Home
    })

    AppRegistry.registerComponent('IntervalTimer', () => appScreens);

Если дело в том, что опора может быть неопределенной, вы можете просто проверить ее на неопределенное значение.

const { navigate } = this.props.navigation || {};

Предполагая, что в какой-то момент navigation определен в рендере, использование приведенного выше должно быть безопасным. Вы можете попробовать зарегистрировать его и посмотреть, всегда ли он неопределен или определен в какой-то момент.

console.info(navigate)

Результат может быть ...

undefined
undefined
//defined

Другие вопросы по теме