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}