react:undefined is not a function(this.State({flag:true,}))
今天在寫react的時候遇到這個問題,就查了一下了解了原因和解決方法:
問題程式碼:
class TestQRAndroidExample extends React.Component{
constructor(props) {
super(props);
this.state = {
torchMode: 'off',
cameraType: 'back',
flag:false,
};
}
barcodeReceived(e) {
console.log('Barcode: ' + e.data);
console.log('Type: ' + e.type);
}
onClick(){
this.setState({
flag:true,
});
console.log("onclick");
QRFromAlbum.chooseImage((res)=>{
var json = JSON.parse(res);
var path = json.imagepath;//得到圖片的路徑
});
}
render() {
if(this.state.flag){
console.log("flag true");
console.log("path:"+path);
return (<View style={styles.main}>
<BarcodeScanner
viewFinderBackgroundColor="#de6e6a6a"
onBarCodeRead={this.barcodeReceived}
style={styles.containerQRView}
torchMode={this.state.torchMode}
cameraType={this.state.cameraType}>
</BarcodeScanner>
<Text style={styles.text}> 請將取景框對準二維碼
</Text>
<TouchableHighlight style={styles.button} underlayColor='#99d9fe'
onPress={this.onClick}
<Text style={styles.buttontext}>開啟相簿中的二維碼 </Text>
</TouchableHighlight>
<Image style={styles.containerImageView}
source={{uri:path}}>
</Image>
</View>
);
}else{
console.log("flag false");
return (<View style={styles.main}>
<BarcodeScanner
viewFinderBackgroundColor="#de6e6a6a"
onBarCodeRead={this.barcodeReceived}
style={styles.containerQRView}
torchMode={this.state.torchMode}
cameraType={this.state.cameraType}>
</BarcodeScanner>
<Text style={styles.text}> 請將取景框對準二維碼
</Text>
<TouchableHighlight style={styles.button} underlayColor='#99d9fe'
onPress={this.onClick}
<Text style={styles.buttontext}>開啟相簿中的二維碼 </Text>
</TouchableHighlight>
</View>
);
}
}
};
var styles = StyleSheet.create({
containerTextView: {
flex: 1,
},
containerImageView:{
flex: 1,
position:'relative',
width:360,
height:590,
},
containerQRView:{
flex: 1,
width:360,
height:590,
},
text:{
position:'relative',
color:'white',
flex:1,
bottom:160,
left:90,
height:60,
fontSize: 15,
fontWeight: 'bold',
flexDirection:'row',
justifyContent:'center',
},
button:{
position:'relative',
flex:1,
backgroundColor:'#48BBEC',
bottom:170,
left:100,
height:35,
flexDirection:'row',
justifyContent:'center',
borderRadius:10,
},
buttontext:{
flex:1,
fontSize:15,
color:'white',
alignSelf:'center',
},
main:{
flex:1,
position:'absolute',
},
});
AppRegistry.registerComponent('TestUI', () => TestQRAndroidExample);
錯誤資訊:
原因:
this指代的是本函式即onClick並不是TestQRAndroidExample這個類 因此提示錯誤
解決方法:
第一種:
bind 這個TestQRAndroidExample類
onPress={this.onClick.bind(this)}
第二種:
使用箭頭函式
onPress={()=>{this.onClick();}}