Получить значение флажка, используя ref в React

Есть ли способ получить значение флажка с помощью ссылки в React. Нормальный способ вернуть всегда значение "вкл" для меня.

var MyForm = React.createClass({
    save: function(){
        console.log(this.refs.check_me.value);
    },

    render: function(){
        return <div><h1>MyForm</h1>
            <div className="checkbox">
                <label>
                    <input type="checkbox" ref="check_me" /> Check me out
                </label>
            </div>
            <button className="btn btn-default" onClick={this.save}>Submit</button>
        </div>
    }
});

4 ответа

Решение

Для флажка используйте "флажок" вместо "значение":

var MyForm = React.createClass({
  save: function () {
    console.log(this.refs.check_me.checked);
  },

  render: function () {
    return <div><h1>MyForm</h1>
      <div className="checkbox">
        <label>
          <input type="checkbox" ref="check_me" /> Check me out
        </label>
      </div>
      <button className="btn btn-default" onClick={this.save}>Submit</button>
    </div>
  }
});

В следствии:

Существует классический способ отловить событие и соответствующие значения с помощью:

event.target.checked, event.target.name

Вы можете увидеть пример:

class MyForm extends React.Component {
    onChangeFavorite(event){
        console.log(event.target.checked, event.target.name);
    };
    render(){
        return (<div><h1>MyForm</h1>
            <div className="checkbox">
                <label>
                   <input type="checkbox" name="myCheckBox1" 
                     onChange={this.onChangeFavorite} 
                     defaultChecked={false} /> 
                   Check me out
                </label>
            </div>
            <button className="btn btn-default" onClick={this.save}>Submit</button>
        </div>)
    };
};

Вы можете сделать флажок контролируемым элементом, слушая onChange и давая ему state значение. Попробуйте следующее:

var MyForm = React.createClass({
  save: function(){
    console.log(this.refs.check_me.value);
  },

  toggleCheckboxValue: () => {
    this.setState({checkBoxValue: !this.state.checkboxValue});
  },

  render: function(){
    return <div><h1>MyForm</h1>
        <div className="checkbox">
            <label>
                <input type="checkbox" ref="check_me" value={this.state.checkboxValue} onChange={this.toggleCheckboxValue} /> Check me out
            </label>
        </div>
        <button className="btn btn-default" onClick={this.save}>Submit</button>
    </div>
  }
});

всякий раз, когда флажок установлен, он будет запускать toggleCheckboxValue функция, которая будет переключать значение this.state.checkboxValue,

Только не забудьте инициализировать this.state.checkboxValue функция в вашем коде.

Примечание: как указывал ivarni, вы можете контролировать checked значение специально для флажков, а не value, Хотя оба решения будут работать.

Я не уверен, почему вы хотите использовать ref конкретно, но это можно сделать наивно:

      import React from 'react';

function CheckBox() {
  const [isSave, setIsSave] = React.useState(false);
  const handler = (value) => {
    console.log(value);
    setIsSave(value);
  };

  return (
    <div>
      <input type="checkbox" onChange={(ev) => handler(ev.target.checked)} />
      <label> Save me..</label>
    </div>
  );
}

export default CheckBox;
Другие вопросы по тегам