无法在事件更改时发送ref值

时间:2016-12-11 18:22:01

标签: reactjs

选中cat复选框后,需要发送CAT值。当未选中时,状态将恢复为空字符串。目前无法在事件上发送价值。这是到目前为止的代码:

var SL = React.createClass({

  getInitialState: function() {
     return {
       cat: '',
       dog: ''
     } 
  },


 sendCheckBoxValue: function(e){
   this.setState({
     cat: this.refs.textInput.value,
     dog: this.refs.textInput.value
   })
  },


 render: function () {
   return (
    <div>
    <p><input type="checkbox" ref="textInput" value={this.state.cat} onChange={this.sendCheckBoxValue}/>CAT</p> 
    <p><input type="checkbox" ref="textInput" value={this.state.dog} onChange={this.sendCheckBoxValue}/>DOG</p> 
  </div>
   )
  } 

})

ReactDOM.render(<SL/>, document.getElementById("root"));

2 个答案:

答案 0 :(得分:1)

首先需要为输入复选框提供checked而不是value。

第二件事,你不需要使用refs,因为你可以从event.target.checked中获取复选框选中的值。

这是代码

var SL = React.createClass({

  getInitialState: function() {
     return {
       cat: '',
       dog: ''
     } 
  },


 sendCheckBoxValue: function(event,type){
   let state = {}
   if(type === 'cat') state.cat = event.target.checked
   if(type === 'dog') state.dog = event.target.checked
   this.setState(state)
  },


 render: function () {
   return (
    <div>
    <p>
      <input 
        type="checkbox" 
        checked={this.state.cat} 
        onChange={ function(event){ 
           return this.sendCheckBoxValue(event,'cat') 
        }.bind(this) }
      />
      CAT
   </p> 
    <p>
      <input 
        type="checkbox" 
        checked={this.state.dog} 
        onChange={ function(event){ 
           return this.sendCheckBoxValue(event,'dog') 
        }.bind(this) }
      />
      DOG
   </p> 
  </div>
   )
  } 

})

ReactDOM.render(<SL/>, document.getElementById("root"));

答案 1 :(得分:1)

尝试使用checked属性而不是value。另外,在ref属性中使用不同的值:

var SL = React.createClass({

  getInitialState: function() {
     return {
       cat: false,
       dog: false
     } 
  },


 sendCheckBoxValue: function(e){
   this.setState({
     cat: this.refs.textInput1.checked,
     dog: this.refs.textInput2.checked
   })
  },


 render: function () {
   return (
    <div>
    <p><input type="checkbox" ref="textInput1" value={this.state.cat} onChange={this.sendCheckBoxValue}/>CAT</p> 
    <p><input type="checkbox" ref="textInput2" value={this.state.dog} onChange={this.sendCheckBoxValue}/>DOG</p> 
  </div>
   )
  } 

})

ReactDOM.render(<SL/>, document.getElementById("root"));