无法读取 属性 未定义的推送

cannot readd property push of undefined

我正在尝试使用 react-native-navigation 组合我的第一个应用程序,并且我正在从网站上的可用示例中提取一些片段。

无论如何,我现在正在尝试使用推送功能来显示新屏幕,但是导航器似乎未定义:

结构是:

- app.js
  - firstScreenTab
      - pushScreenTab
  - secondScreenTab

导航器显然是在app.js文件中定义的。

在我的第一个屏幕选项卡中:

testNavPress() {
    this.props.navigator.push({
        screen: 'manager.SecondTabScreen',
    title: 'Pushed Screen'
});
}

 <Button onPress={this.testNavPress.bind(this)}>
      Push
 </Button>

`

我使用 redux 设置我的应用程序,我想知道我应该如何将我的导航器作为 prop 传递?

我的 app.js 中的启动应用程序函数如下所示:

startApp(root) {
console.log(root);
console.log('START APP!!!!!');

const tabs = [
  {
      label: 'Employees', // tab label as appears under the icon in iOS (optional)
      screen: 'manager.EmployeeListScreen', // unique ID registered with Navigation.registerScreen
      icon: require('../img/one.png'), // local image asset for the tab icon unselected state (optional on iOS)
      selectedIcon: require('../img/one_selected.png'), // local image asset for the tab icon selected state (optional, iOS only. On Android, Use `tabBarSelectedButtonColor` instead)
      iconInsets: { // add this to change icon position (optional, iOS only).
        top: 6, // optional, default is 0.
        left: 0, // optional, default is 0.
        bottom: -6, // optional, default is 0.
        right: 0 // optional, default is 0.
      },
      title: 'Employee List', // title of the screen as appears in the nav bar (optional)
      navigatorStyle: {}, // override the navigator style for the tab screen, see "Styling the navigator" below (optional),
      navigatorButtons: {
        rightButtons: [

              {
                icon: require('../img/navicon_add.png'), // for icon button, provide the local image asset name
                id: 'add' // id for this button, given in onNavigatorEvent(event) to help understand which button was clicked
              }
            ]
      } // override the nav buttons for the tab screen, see "Adding buttons to the navigator" below (optional)
    },
  {
      label: 'One', // tab label as appears under the icon in iOS (optional)
      screen: 'manager.FirstTabScreen', // unique ID registered with Navigation.registerScreen
      icon: require('../img/one.png'), // local image asset for the tab icon unselected state (optional on iOS)
      selectedIcon: require('../img/one_selected.png'), // local image asset for the tab icon selected state (optional, iOS only. On Android, Use `tabBarSelectedButtonColor` instead)
      iconInsets: { // add this to change icon position (optional, iOS only).
        top: 6, // optional, default is 0.
        left: 0, // optional, default is 0.
        bottom: -6, // optional, default is 0.
        right: 0 // optional, default is 0.
      },
      title: 'Screen One', // title of the screen as appears in the nav bar (optional)
      navigatorStyle: {}, // override the navigator style for the tab screen, see "Styling the navigator" below (optional),
      navigatorButtons: {} // override the nav buttons for the tab screen, see "Adding buttons to the navigator" below (optional)
    },
    {
      label: 'Two',
      screen: 'manager.SecondTabScreen',
      icon: require('../img/two.png'),
      selectedIcon: require('../img/two_selected.png'),
      title: 'Screen Two'
    }
];


switch (root) {
  case 'user':
     Navigation.startTabBasedApp({
      tabs,
      tabsStyle: {
        tabBarButtonColor: 'white',
        tabBarSelectedButtonColor: 'white',
        tabBarBackgroundColor: '#099880'
      }
    });
    break;
  default: 
     Navigation.startSingleScreenApp({
      screen: {
        screen: 'manager.LoginScreen', // unique ID registered with Navigation.registerScreen
        title: 'Log in', // title of the screen as appears in the nav bar (optional)
        navigatorStyle: {}, // override the navigator style for the screen, see "Styling the navigator" below (optional)
        navigatorButtons: {} // override the nav buttons for the screen, see "Adding buttons to the navigator" below (optional)
      }
    });
  }
  } // startApp
}
export default App;

我浏览了其他问题,但大多数都提到了react-navigation,我使用的是react-native-navigation。

Navigation.startTabBasedApp 不使用 navigator - 它只是调用根据您提供的对象构造 UI 的本机方法。

确保在 firstScreentab 中调用 super(props),以便 RNN 可以将导航器注入屏幕。