如何设置默认选中复选框 ReactJS?

IT技术 reactjs checkbox
2021-04-04 01:39:52

checked="checked"在 React 中为复选框分配默认值后,我无法更新复选框状态

var rCheck = React.createElement('input',
    {
        type: 'checkbox',
        checked: 'checked',
        value: true
    }, 'Check here');

分配后checked="checked",我无法通过单击取消选中/选中来交互复选框状态。

6个回答

要与框交互,您需要在更改复选框后更新它的状态。要获得默认设置,您可以使用defaultChecked.

一个例子:

<input type="checkbox" defaultChecked={this.state.chkbox} onChange={this.handleChangeChk} />
@YarinNim 您可以render与上述<input>元素一起使用。defaultChecked可以作为像PARAM提供checkedIS。
2021-05-28 01:39:52
这真的很奇怪。我只是在修复一个checkbox默认情况下不检查a 的错误,因为有人使用defaultChecked而不是仅使用checked. 我将其更改为checked,问题已解决。可能自 2015 年以来发生了一些变化——或者 Formik 搞砸了defaultChecked.
2021-06-20 01:39:52
但我没有将 INPUT 创建为类,它是由 React.createElement 创建的。那么,如何设置默认值
2021-06-21 01:39:52

有几种方法可以实现这一点,这里有一些:

使用 State Hooks 编写

function Checkbox() {
  const [checked, setChecked] = React.useState(true);

  return (
    <label>
      <input type="checkbox"
        defaultChecked={checked}
        onChange={() => setChecked(!checked)}
      />
      Check Me!
    </label>
  );
}

ReactDOM.render(
  <Checkbox />,
  document.getElementById('checkbox'),
);

这是JSBin上的现场演示

使用组件编写

class Checkbox extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      isChecked: true,
    };
  }
  toggleChange = () => {
    this.setState({
      isChecked: !this.state.isChecked,
    });
  }
  render() {
    return (
      <label>
        <input type="checkbox"
          defaultChecked={this.state.isChecked}
          onChange={this.toggleChange}
        />
        Check Me!
      </label>
    );
  }
}

ReactDOM.render(
  <Checkbox />,
  document.getElementById('checkbox'),
);

这是JSBin上的现场演示

这不再起作用,抛出未处理的输入错误
2021-05-22 01:39:52
这有效,但 defaultChecked 更好。
2021-05-26 01:39:52
状态满分!无状态方法怎么样?
2021-06-02 01:39:52
测试它&它在我这边工作正常。你有任何额外的信息@user6329530吗?
2021-06-09 01:39:52
我建议你做这样的 setState onChange={() => setChecked(prevState => !prevState)}
2021-06-21 01:39:52

如果复选框仅创建,React.createElement则使用该属性 defaultChecked

React.createElement('input',{type: 'checkbox', defaultChecked: false});

归功于@nash_ag

谢谢,我想我误解了它
2021-05-30 01:39:52
@FareedAlnamrouti 这些陈述并不相互排斥。Yarin 说,如果使用 React.createElement,则需要 defaultChecked,而不是专门用于此目的。
2021-06-09 01:39:52
这是不对的,您也可以将 defaultChecked 与普通 html 标记一起使用,与 (class => className) 和 (for => htmlFor) 等相同...
2021-06-16 01:39:52

在 React 渲染生命周期中,表单元素的 value 属性会覆盖 DOM 中的值。对于不受控制的组件,您通常希望 React 指定初始值,但不控制后续更新。要处理这种情况,您可以指定 defaultValue 或 defaultChecked 属性而不是 value。

        <input
          type="checkbox"
          defaultChecked={true}
        />

或者

React.createElement('input',{type: 'checkbox', defaultChecked: true});

请查看有关defaultChecked以下复选框的更多详细信息https : //reactjs.org/docs/uncontrolled-components.html#default-values

如果您直接使用已检查的参数,则无法取消选中它。为此必须使用 defaultChecked 参数。谢谢。
2021-06-10 01:39:52

除了正确答案外,您还可以这样做:P

<input name="remember" type="checkbox" defaultChecked/>
应该是公认的答案,因为这是大多数人会寻找的:本机 HTML 的替代品checked
2021-06-07 01:39:52