Я пытаюсь получить приложение React Native, настроенное после сообщения this, а затем перенесено на ES6. Вот основной код страницы:undefined не является объектом (оценка 'state.cameraType')
"use strict";
import React, { Component } from 'react';
import Camera from 'react-native-camera';
import {
AppRegistry,
StyleSheet,
Text,
View,
TextInput,
TouchableHighlight,
} from 'react-native';
export default class AwesomeProject extends Component {
constructor(props) {
super(props);
this.state = {cameraType: Camera.constants.Type.back};
}
render() {
return (
<Camera
ref="cam"
style={styles.container}
type={this.state.cameraType}>
<View style={styles.buttonBar}>
<TouchableHighlight style={styles.button} onPress={this._switchCamera.bind(this)}>
<Text style={styles.buttonText}>Flip</Text>
</TouchableHighlight>
<TouchableHighlight style={styles.button} onPress={this._takePicture.bind(this)}>
<Text style={styles.buttonText}>Take</Text>
</TouchableHighlight>
</View>
</Camera>
);
}
_switchCamera:() => {
var state = this.state;
console.log(this.state);
state.cameraType = state.cameraType === Camera.constants.Type.back ? Camera.constants.Type.front : Camera.constants.Type.back;
this.setState(state);
}
_takePicture:() => {
console.log(this.refs);
this.refs.cam.capture(function(err, data) {
console.log(err, data);
});
}
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: "center",
alignItems: "center",
backgroundColor: "transparent",
},
buttonBar: {
flexDirection: "row",
position: "absolute",
bottom: 25,
right: 0,
left: 0,
justifyContent: "center"
},
button: {
padding: 10,
color: "#FFFFFF",
borderWidth: 1,
borderColor: "#FFFFFF",
margin: 5
},
buttonText: {
color: "#FFFFFF"
}
});
AppRegistry.registerComponent('AwesomeProject',() => AwesomeProject);
Я получаю странные ошибки, говоря как state.cameraType
не определено и this.refs
не определено. У меня есть подозрение, что что-то не связано, и мой this
не указывает на правильную вещь, но я пробовал использовать обе функции стрелок и явно привязывать. См. Комментарий ниже. Во всяком случае, я не уверен, почему это действует, какие-то идеи?
Очень похоже на this post, за исключением того, что я попробовал оба предлагаемых решения, поэтому я чувствую, что что-то еще отсутствует, или я делаю привязку неправильно.
Редактировать: Есть ли причина, чтобы быть опущенной? Я что-то не понимаю: o