首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React复选框组件需要单击两次才能更改为选中状态

问React复选框组件需要单击两次才能更改为选中状态
EN

Stack Overflow用户
提问于 2019-11-06 05:33:26
回答 2查看 1.8K关注 0票数 4

我有一个呈现复选框的React组件。问题是需要两次单击才能变为选中状态,然后再单击两次才能变为未选中状态。

JS:

代码语言:javascript
复制
import React, { Component } from "react";

class CheckboxRow extends Component {
  constructor(props) {
    super(props);
    this.state = { checked: false };
  }

  inputChangedHandler() {
    this.setState({ checked: !this.state.checked });
  }

  render() {
    return (
      <div className="checkbox-row">
        <input
          id={this.props.id}
          type="checkbox"
          onChange={() => this.inputChangedHandler()}
          checked={this.state.checked}
        />
        <label htmlFor={this.props.id} className="checkbox-row__label">
          Label goes here
        </label>
      </div>
    );
  }
}

export default CheckboxRow;

那么,我需要做什么才能使复选框在一次单击时变为选中状态,并在一次单击时变回未选中状态?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-06 05:38:04

在更改状态时,不应直接访问旧状态,如

代码语言:javascript
复制
this.setState({ checked: !this.state.checked });

而不是这样做

代码语言:javascript
复制
this.setState(({ checked }) => ({ checked: !checked }));

或者从onChange访问传递的事件。这里写成了一个较短的功能组件

代码语言:javascript
复制
function CheckboxRow({ id }) {
  const [checked, setChecked] = useState(false);

  const onChange = event => {
    event.persist();
    setChecked(event.target.checked);
  };

  return (
    <div className="checkbox-row">
      <input id={id} type="checkbox" onChange={onChange} checked={checked} />
      <label htmlFor={id} className="checkbox-row__label">
        Label goes here
      </label>
    </div>
  );
}
票数 2
EN

Stack Overflow用户

发布于 2019-11-06 05:41:47

盯着它看了几个小时后,我顿时灵光乍现!我有一个onChange格式的prevent.default()!多亏了那些已经回复的人,移除prevent.default()修复了这个问题。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58719791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档