评估 ( this.props.navigator ) 未定义不是对象

evaluating ( this.props.navigator ) Undefined is not an object

即使我正确地传递了导航器 porp,我还是收到了这个错误。

MySetup 是这样的:Main navigator Page -> FirstView (onBtnPress) -> Details

我在 firstView 页面中调用 this.navigator.push 时遇到错误。

主文件:

import React, { Component, PropTypes } from 'react';

import {
    AppRegistry,
    StyleSheet,
    Text,
    View,
    Navigator
} from 'react-native';

class app extends Component{

    constructor(props) {
        super(props); 
    }


   navigatorRenderScene(route, navigator) {
        return <route.component navigator={navigator}/>

  }
     configureScene() {
    return Navigator.SceneConfigs.VerticalDownSwipeJump;
  }


    render() {

      return (
     <Navigator
        style={styles.container}
        initialRoute= {{component: MainMapView}}
        renderScene={this.navigatorRenderScene}/>
      );
    }
}


const styles = StyleSheet.create({
  container: { flex: 1, flexDirection: 'column', padding: 20 }
});

AppRegistry.registerComponent('app', () => app);

第一个组件:

    <ActionButton buttonColor="rgba(30,144,255,1)" style={styles.fabIcon}
                  onPress={this.fabPress}>
    </ActionButton>


  fabPress() {
  this.props.navigator.push({
      component : DetaislView
    });
  }

fabPress 出现错误。

对我做错了什么有什么想法吗?

在您的 FirstComponent.js 中试试这个:

class FirstComponent extends Component {

    constructor(props) {
        super(props); 
        this.fabPress = this.fabPress.bind(this);
    }

    // ... rest of the code remains the same

为什么我们必须这样做?

回到我们使用 React.createClass (ES5) 的时代,class 方法自动绑定到 class。但是当我们开始 extend (ES6 classes) 时,我们需要将方法显式绑定到 class env.

fabPress 作为事件的回调函数传递,它在 class 之外的另一个环境中执行;因此 this 将来自执行环境的范围。但是我们需要 class 中的 this 才能访问 this.props.navigator :)

以防万一,如果有人对为什么即使您在 class.

中具有该功能,它也不起作用的原因感兴趣。

如果声明如下所示,该函数未绑定到 class。

  theFunctionName() {
         // your code
  }

如果使用以下语法声明函数,则该函数绑定到 class。

  theFunctionName = () => {
         // your code
  }

因此您可以省略 bind(this) 代码。

引用自

请确保您有必要的预设。由于箭头函数是高度实验性的功能(截至这段时间)

对于我的案例,我传入了导航器:

  onPress={this.fabPress(navigator)}

  fabPress(navigator) {
    navigator.push({component: DetaislView});
  }