React组件正在更改类型的不受控制的输入复选框

时间:2020-05-06 15:30:16

标签: reactjs checkbox components warnings

具有以下用于自定义复选框的React组件,其中值作为父项的props向下传递

export const CheckBox = (props) => {
  let closeClass;

  if (!props.hint && props.hint == "") {
    closeClass = "no-hint";
  }
  return (
    <div className={"field-wrapper checkbox-button-grouped"}>
      <label htmlFor={`checkbox_${props.value}`}>
        <input
          onChange={props.handleCheckChieldElement}
          type="checkbox"
          name={props.name}
          id={`checkbox_${props.value}`}
          className={"input-field"}
          checked={props.isChecked}
          value={props.value || ""}
        />
        <div className="label-text">
          <div className={"label-name"}>{props.label}</div>
          {props.hint && props.hint !== "" ? (
            <div className={"info-icon"}>
              <InfoIcon className={"info-icon"} />
            </div>
          ) : null}
          <div className={"hint"}>{props.hint}</div>
          <UncheckIcon className={classnames("uncheck", closeClass)} />
          <Checkmark className={"ok-icon"} />
        </div>
      </label>
    </div>
  );
};

export default CheckBox;

我不断收到以下错误消息

Warning: A component is changing an uncontrolled input of type checkbox to be controlled. Input elements should not switch from uncontrolled to controlled (or vice versa). Decide between using a controlled or uncontrolled input element for the lifetime of the component.

在这种情况下我在做什么错了?

2 个答案:

答案 0 :(得分:2)

props.isChecked可能为null或未定义,您可以这样解决:

checked={props.isChecked || false}

答案 1 :(得分:0)

警告:组件正在更改要控制的复选框类型的不受控制的输入

如果收到此错误,则意味着onChange函数不会更新提供给输入字段的值。

分配给任何输入的值状态只能通过onChange函数进行修改,否则会出现此警告。

一旦执行onChange操作,该值也可能未定义。

根据您的情况声明

被检查为布尔值,并根据需要将其初始值设置为false或true。

如果您使用钩子

const [isChecked, setIsChecked] = React.useState(false);

用于类组件

this.state = {
   isChecked: false
}

这是代码沙箱code中的工作代码