无法使用子元素中的复选框读取未定义的属性“数据”

IT技术 reactjs checkbox parent-child
2021-05-26 15:44:02

我从列表生成子元素,所以每个子元素都有相同的复选框。然后我想创建一个函数来检查我的复选框的状态(handleChecked)

但我收到这个错误

无法读取未定义的属性“数据”

这是我的情况的一个例子:https : //codesandbox.io/s/test-uz-713xy

2个回答

您可以进行以下更改。您将在切换状态时打印日志。您可以存储函数不变,而不是像我在下面演示的那样调用它

import React, { Component } from "react";
import "./styles.css";

class Profils extends Component {
  constructor(props) {
    super(props);

    this.state = {
      data: [
        {
          name: "Perceval"
        },
        {
          name: "Merlin"
        },
        {
          name: "General Kenobi"
        }
      ]
    };

    this.handleChecked = this.handleChecked.bind(this);
  }

  handleChecked(event) {
    if (event.target.checked === true) {
      console.log(event.target.id, " is checked");
    } else if (event.target.checked === false) {
      console.log(event.target.id, " is unchecked");
    } else {
      console.log("test fail");
    }
  }

  render() {
    let ch = this.handleChecked;
    return (
      <div className="Profil">
        {this.state.data.map(function(panel) {
          return (
            <div key={panel.name}>
              <h1> Hello my name is {panel.name}</h1>
              <input
                className="tgl tgl-skewed"
                id={panel.name}
                type="checkbox"
                onChange={(e)=>ch(e)}
              />
              <label
                className="tgl-btn"
                data-tg-off="Test is OFF"
                data-tg-on="Test is ON"
                htmlFor={panel.name}
              />
            </div>
          );
        })}
      </div>
    );
  }
}

export default Profils;

我认为这个例子不是你的代码,因为它似乎工作正常。

从错误中,我假设您以错误的方式访问您的状态。您正在获得未定义的状态。你能分享你从国家访问数据的代码吗?