React native TypeError:TypeError:null不是对象(计算'this.state.ischecked1')
每次我尝试单击复选框时,我都会看到上面的错误 我希望对下面显示的四个复选框进行单独检查,但我无法这样做。请帮忙! 代码如下: 从“React”导入*作为React; 进口{ 文本 看法 样式表, 可触摸不透明度, 滚动视图, 按钮 }从“反应本机”; 从“react native elements”导入{Header,Icon}; 从“expo”导入{Constants}; 从“react native elements”导入{CheckBox}; 进口{ createStackNavigator, createNavigatorContainer, }从“反应导航”; 导出默认类UpdateType扩展React.Component{ 静态导航选项={ 标题:“更新类型”, 风格:{ 显示:“flex”, flexDirection:'行', 背景颜色:“FFD700”, }, }; 构造器{ 超级作物; 此.state={ ischecked1:是的, ischecked2:错误, ischecked3:是的, ischecked4:错误, } } onChangeCheck1{ this.setState{ischecked1:!this.state.ischecked1}; } onChangeCheck2{ this.setState{ischecked2:!this.state.ischecked2}; } 更改支票3{ this.setState{ischecked3:!this.state.ischecked3}; } 更改支票4{ this.setState{ischecked4:!this.state.ischecked4}; } 渲染{ 回来 全选 全部取消选择 一些随机文本。下面是一些复选框。等等! 广告 ; } } const styles=StyleSheet.create{ 容器:{ 弹性:1, 显示:“flex”, flexDirection:'列', }, 选项:{ 弹性:1, 对齐项目:“居中”, 边框颜色:“008080”, }, 书面:{ 弹性系数:0.3, 背景颜色:“FFE4B5”, 为内容辩护:“中心”, 对齐项目:“居中”, 填充:8, }, 内部视图:{ 弹性系数:0.4, 显示:“flex”, flexDirection:'行', 对齐项目:“居中”, 为内容辩护:“中心”, }, adsense:{ 弹性系数:0.55, 为内容辩护:“中心”, 对齐项目:“居中”, 背景颜色:“778899”, }, }; 此外,我还不知道何时使用: 一旦改变 一次性支票 奥尼康普雷斯 昂隆出版社 onPressReact native TypeError:TypeError:null不是对象(计算'this.state.ischecked1'),react-native,react-native-android,expo,React Native,React Native Android,Expo,每次我尝试单击复选框时,我都会看到上面的错误 我希望对下面显示的四个复选框进行单独检查,但我无法这样做。请帮忙! 代码如下: 从“React”导入*作为React; 进口{ 文本 看法 样式表, 可触摸不透明度, 滚动视图, 按钮 }从“反应本机”; 从“react native elements”导入{Header,Icon}; 从“expo”导入{Constants}; 从“react native elements”导入{CheckBox}; 进口{ createStackNavigato
这些是相同的,还是有特定的用法?有一点显然是错误的:用this.state替换const state== 另外,绑定函数:
onPress={this.onChangeCheck1.bind(this)}
更新的代码您可以以与“selectAll”类似的方式添加“取消全部”:
import * as React from 'react';
import {
Text,
View,
StyleSheet,
TouchableOpacity
} from 'react-native';
import { CheckBox } from 'react-native-elements';
export default class UpdateTypes extends React.Component {
static navigationOptions = {
title: 'UPDATE TYPES',
style: {
display: 'flex',
flexDirection: 'row',
backgroundColor: '#FFD700'
}
};
constructor(props) {
super(props);
this.state = {
ischecked1: true,
ischecked2: false,
ischecked3: true,
ischecked4: false
};
}
onChangeCheck1() {
this.setState({ ischecked1: !this.state.ischecked1 });
}
onChangeCheck2() {
this.setState({ ischecked2: !this.state.ischecked2 });
}
onChangeCheck3() {
this.setState({ ischecked3: !this.state.ischecked3 });
}
onChangeCheck4() {
this.setState({ ischecked4: !this.state.ischecked4 });
}
selectAll() {
this.setState({
ischecked1: true,
ischecked2: true,
ischecked3: true,
ischecked4: true
});
}
render() {
return (
<View style={styles.container}>
<View style={styles.innerview}>
<TouchableOpacity style={styles.options} onPress={this.selectAll.bind(this)}>
<Text>Select All</Text>
</TouchableOpacity>
<TouchableOpacity style={styles.options}>
<Text>Deselect All</Text>
</TouchableOpacity>
</View>
<Text style={styles.writeup}>
Some random Texts. Below are some checkboxes. Bla Bla Bla!
</Text>
<View style={StyleSheet.create({ flex: 1 })}>
<CheckBox
center
title="CheckBoxA"
checkedIcon="dot-circle-o"
uncheckedIcon="circle-o"
value={this.state.ischecked1}
checked={this.state.ischecked1}
onPress={this.onChangeCheck1.bind(this)}
/>
<CheckBox
center
title="CheckBoxB"
checkedIcon="dot-circle-o"
uncheckedIcon="circle-o"
checked={this.state.ischecked2}
value={this.state.ischecked2}
onPress={this.onChangeCheck2.bind(this)}
/>
<CheckBox
center
title="CheckBoxC"
checkedIcon="dot-circle-o"
uncheckedIcon="circle-o"
checked={this.state.ischecked3}
value={this.state.ischecked3}
onPress={this.onChangeCheck3.bind(this)}
/>
<CheckBox
center
title="CheckBoxD"
checkedIcon="dot-circle-o"
uncheckedIcon="circle-o"
value={this.state.ischecked4}
checked={this.state.ischecked4}
onPress={this.onChangeCheck4.bind(this)}
/>
</View>
<TouchableOpacity style={styles.adsense}>
<Text>Adsense Ad</Text>
</TouchableOpacity>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
display: 'flex',
flexDirection: 'column'
},
options: {
flex: 1,
alignItems: 'center',
borderColor: '#008080'
},
writeup: {
flex: 0.3,
backgroundColor: '#FFE4B5',
justifyContent: 'center',
alignItems: 'center',
padding: 8
},
innerview: {
flex: 0.4,
display: 'flex',
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center'
},
adsense: {
flex: 0.55,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#778899'
}
});
对于复选框的onClick事件,需要使用自动绑定或箭头功能
onChangeCheck1 = () => {
this.setState({ ischecked1: !this.state.ischecked1 });
}
它没有得到“this”对象,因为调用onClick的上下文不同。我已经编辑了这个问题。您可以在这里看到整个代码。请告诉我任何可能的解决办法。另外,还有两个按钮叫做全选和全选,我希望它们也能正常工作。你能看看出了什么问题吗?当你点击一个复选框时,你仍然会得到同样的错误吗?是的。如果您尝试在expo上复制代码并运行它,您将能够看到相同的错误。请检查回复谢谢。这很有帮助。关于问题的后半部分,我认为所有的方法都是一样的。onpress、onchange、onchangecheck、onlongpress、,?