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

Yar*_*Nim 135 checkbox reactjs

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

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

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

nit*_*gar 198

要与框进行交互,您需要在更改后更新复选框的状态.并且可以使用默认设置defaultChecked.

一个例子:

<input type="checkbox" defaultChecked={this.state.chkbox} onChange={this.handleChangeChk} />
Run Code Online (Sandbox Code Playgroud)

  • @YarinNim你可以使用`render`和上面的`<input>`元素.`defaultChecked`可以像`checked`那样提供. (5认同)

Jon*_*Saw 50

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

写在ES6:

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"
          checked={this.state.isChecked}
          onChange={this.toggleChange}
        />
        Check Me!
       </label>
    );
  }
}

ReactDOM.render(<Checkbox />, document.getElementById('checkbox'));
Run Code Online (Sandbox Code Playgroud)

这是关于JSBin的现场演示.

或者使用普通的旧JavaScript:

var Checkbox = React.createClass({
  getInitialState: function() {
    return {
      isChecked: true
    };
  },
  toggleChange: function() {
    this.setState({
      isChecked: !this.state.isChecked // flip boolean value
    }, function() {
      console.log(this.state);
    }.bind(this));
  },
  render: function() {
    return (
      <label>
        <input
          type="checkbox"
          checked={this.state.isChecked}
          onChange={this.toggleChange} />
        Check Me!
      </label>
    );
  }
});

React.render(<Checkbox />, document.getElementById('checkbox'));
Run Code Online (Sandbox Code Playgroud)

再次,在JSBin上进行现场演示.

  • 全州!无状态方法怎么样? (2认同)

Yar*_*Nim 47

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

React.createElement('input',{type: 'checkbox', defaultChecked: false});
Run Code Online (Sandbox Code Playgroud)

感谢@nash_ag

  • 这是不对的你可以使用defaultChecked也使用普通的html标签,与(class => className)和(for => htmlFor)等相同...... (4认同)

Mur*_*ain 17

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

        <input
          type="checkbox"
          defaultChecked={true}
        />
Run Code Online (Sandbox Code Playgroud)

要么

React.createElement('input',{type: 'checkbox', defaultChecked: true});
Run Code Online (Sandbox Code Playgroud)

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


Far*_*uti 9

除了正确答案,你可以这样做:P

<input name="remember" type="checkbox" defaultChecked/>
Run Code Online (Sandbox Code Playgroud)


MD *_*YON 8

值是 true 还是 falsedefaultChecked={true}

<input type="checkbox"
        defaultChecked={true}
        onChange={() => setChecked(!checked)}
      />
Run Code Online (Sandbox Code Playgroud)


Aug*_*imo 8

import React, { useState } from 'react'


const [rememberUser, setRememberUser] = useState(true) //use false for unchecked initially


<input
   type="checkbox"
   checked={rememberUser}
   onChange={() => {
      setRememberUser(!rememberUser)
   }}
/>

Run Code Online (Sandbox Code Playgroud)

  • @RahulMore 如果您使用 `checked` 属性 **没有** `onChange` 它将呈现一个只读字段。 (2认同)

小智 5

它正在工作

<input type="checkbox" value={props.key} defaultChecked={props.checked} ref={props.key} onChange={this.checkboxHandler} />
Run Code Online (Sandbox Code Playgroud)

和函数初始化它

{this.viewCheckbox({ key: 'yourKey', text: 'yourText', checked: this.state.yourKey })}
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以将“true”或“”传递给输入复选框的checked属性。空引号 ("") 将被理解为 false,并且该项目将被取消选中。

let checked = variable === value ? "true" : "";
<input
     className="form-check-input"
    type="checkbox"
    value={variable}
    id={variable}
    name={variable}
    checked={checked}
/>
<label className="form-check-label">{variable}</label>
Run Code Online (Sandbox Code Playgroud)