React native TypeError:TypeError:null不是对象(计算'this.state.ischecked1')

React 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

每次我尝试单击复选框时,我都会看到上面的错误 我希望对下面显示的四个复选框进行单独检查,但我无法这样做。请帮忙! 代码如下:

从“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”, }, }; 此外,我还不知道何时使用:

一旦改变 一次性支票 奥尼康普雷斯 昂隆出版社 onPress
这些是相同的,还是有特定的用法?

有一点显然是错误的:用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、,?