Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeError:无法读取属性';收据编号';在react native中未定义的_Javascript_Android_Ios_Reactjs_React Native - Fatal编程技术网

Javascript TypeError:无法读取属性';收据编号';在react native中未定义的

Javascript TypeError:无法读取属性';收据编号';在react native中未定义的,javascript,android,ios,reactjs,react-native,Javascript,Android,Ios,Reactjs,React Native,我的组件状态中有这些属性 constructor(props) { super(props); this._onPress = this._onPress.bind(this); this.state = { receiptnumber: "", text: "", time: "", isDateTimePickerVisible: false }; } 我已经在按钮的点击事件上绑定了\onPress方法,该按钮执行良好。我正在调用另一个方法\

我的组件状态中有这些属性

constructor(props) {
  super(props);
  this._onPress = this._onPress.bind(this);
  this.state = {
    receiptnumber: "",
    text: "",
    time: "",
    isDateTimePickerVisible: false
  };
}
我已经在按钮的点击事件上绑定了
\onPress
方法,该按钮执行良好。我正在调用另一个方法
\u saveScheduleMessage
\u onPress
方法中,我试图访问
此.state.receiptnumber
,我得到了一个错误

_onPress() {
  try {
      if (Platform.OS === "android") {
        if (Platform.Version >= 23) {
          Promise.resolve(requestSendSMSPermission()).then(function(result) {
            // user granted SMS permission
            if (result) {
              this._saveScheduleMessage;
            } else {
              // user denied SMS permission
              Alert.alert(
                strings.permission_required,
                strings.send_sms_deny_permission
              );
            }
          });
        }
      }
  } catch (error) {
    console.log(error);
  }
}

_saveScheduleMessage() {
  realm.write(() => {
    realm.create("NewMessage", {
      receiptNumber: this.state.receiptnumber,
      text: this.state.text,
      time: this.state.time
    });
  });
  const resetAction = NavigationActions.reset({
    index: 0,
    actions: [
      NavigationActions.navigate({
        routeName: "DashboardScreen"
      })
    ]
  });
  navigate.dispatch(resetAction);
}
PermissionManager.js

import { PermissionsAndroid } from "react-native";

module.exports = {
  requestSendSMSPermission: async function() {
    try {
      const granted = await PermissionsAndroid.request(
        PermissionsAndroid.PERMISSIONS.SEND_SMS
      );
      if (granted === PermissionsAndroid.RESULTS.GRANTED) {
        return true;
      } else {
        return false;
      }
    } catch (err) {
      console.warn(err);
    }
  }
};
这就是我在Press上调用
\u方法的方式

<RoundButton
    textStyle={styles.roundTextStyle}
    buttonStyle={styles.roundButtonStyle}
    onPress={() => this._onPress()}
  >
有人知道我怎么修吗

当我删除
Promise.resolve
时,它会起作用,但我需要它来处理权限问题

_onPress() {
  realm.write(() => {
    realm.create("NewMessage", {
      receiptNumber: this.state.receiptnumber,
      text: this.state.text,
      time: this.state.time
    });
  });

  const resetAction = NavigationActions.reset({
    index: 0,
    actions: [
      NavigationActions.navigate({
        routeName: "DashboardScreen"
      })
    ]
  });
  this.props.navigation.dispatch(resetAction);
}  
试着替换

function(result) 

我不能真正解释这个理论,但基本上这个“=>”语法使你的函数不能立即执行

例如,如果你做了这样的事情

onPress = {this.onPress}
即使没有press事件,此.onPress方法也将立即执行


也许一些专家可以更恰当地解释这一点

你能在render方法之后尝试控制台记录this.state.receiptnumber吗?如果它仍然未定义:尝试这样做addcomponentwillmount方法,并将其放入这个.setState({receiptnumber:'your number')@是的。即使在
\u onPress
中也可以访问它。请检查更新的问题。它可以在没有承诺的情况下工作。resolve
但是我需要承诺。resolve来获得权限。你可以尝试将函数(result)替换为result=>并尝试记录结果吗?先生,也许我没有适当的解释,但我现在已经知道了
result => 
onPress = {this.onPress}