javascript - 如何选中/取消选中 react 中的复选框列表

标签 javascript reactjs checkbox redux react-redux

我有一个 room 页面,在该页面中我有一个连接到该房间的传感器列表,可以使用复选框选择这些传感器,如下所示:

<div className="checkboxRowContent">
  {sensors.map(s => {
    return (
      <div className="checkboxElementWrapper" key={s.id}>
        <label htmlFor={`sensor${s.id}`}>
          <div className="checkboxLabel">
            <Link to={`/sensors/edit/${s.id}`}>{s.name}</Link>
          </div>
          <input
            type="checkbox"
            id={`sensor${s.id}`}
            name="sensorId"
            value={s.id}
            checked={s.roomId === values.id}
            onChange={handleCheckbox}
          />
          <span className="checkbox" />
        </label>
      </div>
    );
  })}
</div>

问题是 - 这种方法禁止我取消选中复选框(所以如果在数据库中,传感器连接到那个房间 - 就是这样)。我如何重写它以便我可以选中/取消选中此复选框?

最佳答案

在类里面你必须有状态,

一个例子有点像这样

export default class yourComponent extends React.Component {

  state = {
    checkedBoxes: []
  }

  handleCheckbox = (e, s) => {
    const checkedBoxes = [...this.state.checkedBoxes];
    if(e.target.checked) {
      checkedBoxes.push(s)
    } else {
      const index = checkedBoxes.findIndex((ch) => ch.roomId === s.roomId);
      checkedBoxes.splice(index, 1);
    }
    this.setState({checkedBoxes});
  }


  render() {

    return(
      <div className="checkboxRowContent">
      {sensors.map(s => {
          return (
            <div className="checkboxElementWrapper" key={s.id}>
              <label htmlFor={`sensor${s.id}`}>
                <div className="checkboxLabel">
                  <Link to={`/sensors/edit/${s.id}`}>{s.name}</Link>
                </div>
                <input
                  type="checkbox"
                  id={`sensor${s.id}`}
                  name="sensorId"
                  checked={checkedBoxes.find((ch) => ch.roomId === s.roomId)}
                  onChange={(e) => handleCheckbox(e, s)}
                />
                <span className="checkbox" />
              </label>
            </div>
          );
        })}
      </div>
    )
  }
}

一个状态,checkedBoxes,用于获取所有选中的复选框。

用于处理复选框点击的处理程序 handleCheckbox

关于javascript - 如何选中/取消选中 react 中的复选框列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48520775/

相关文章:

javascript - 自动将 json 操作为具有不同结构的对象

javascript - 选择传单标记

javascript - Google BigQuery Python 库下载结果的速度是 Node JS 库的 2 倍

javascript - 使用 JS 访问 HTML 数据属性,而不使用 .getelementbyid?

javascript - iCheck 复选框无法在移动设备上使用

html - 将自定义图像设置为没有强制标签的复选框

javascript - 单击同一行中的任何复选框时,选中/取消选中表格行中的复选框

reactjs - 使用 typescript 的 create-react-app 不起作用

reactjs - Office UI Fabric React 图标未与 Gatsby 一起显示

css - 如何使用 Flexbox 破坏对象并做出正确 react