undefined is not an object (evaluating 'this.p

2019-09-16 07:08发布

问题:

I try to read QRcode with react native then I install library

and this is my code

  'use strict';

    var React = require('react-native');
    var {
      AppRegistry,
      StyleSheet,
      Text,
      View,
      TouchableOpacity,
      NavigatorIOS,
    } = React;

    var QRCodeScreen = require('./QRCodeScreen');   

  var cameraApp = React.createClass({
      render: function() {
        return (
          <NavigatorIOS
            style={styles.container,{ width:100,height:500}}
            initialRoute={{
              title: 'Index',
              backButtonTitle: 'Back',
              component: Index,
            }}
          />        
        );
      }
    });    

    var Index = React.createClass({        
      render: function() {
        return (
          <View style={styles.contentContainer}>
            <TouchableOpacity onPress={this._onPressQRCode} >
              <Text>Read QRCode</Text>
            </TouchableOpacity>
          </View>
        );
      },        
      _onPressQRCode: function() {
        this.props.navigator.push({
          component: QRCodeScreen,
          title: 'QRCode',
          passProps: {
            onSucess: this._onSucess,
          },
        });
      },        
      _onSucess: function(result) {
        console.log(result);
      },

    });           


    var styles = StyleSheet.create({
      container: {
        flex: 1,
        backgroundColor: '#F5FCFF',        
      },
      contentContainer: {
        flex: 1,
        alignItems: 'center',
        justifyContent: 'center',
      }
    });

    AppRegistry.registerComponent('MyFirstReactapril', () => cameraApp);

but I get this Error undefined is not an object (evaluating 'this.props.navigator.push')

and I don't know what is wrong with it , please help. Or is there any library can read QRCode and gives me the link or string?

回答1:

NavigatorIOS component works only in iOS. You need to use Navigator component which will work in both Android and iOS.