React Checkbox不发送onChange

TLDR:使用defaultChecked而不是已检查的工作jsbin。

尝试设置一个简单的复选框,该复选框将在选中时划掉其标签文本。由于某些原因,当我使用组件时,不会触发handleChange。谁能解释我在做什么错?

var CrossoutCheckbox = React.createClass({

getInitialState: function () {

return {

complete: (!!this.props.complete) || false

};

},

handleChange: function(){

console.log('handleChange', this.refs.complete.checked); // Never gets logged

this.setState({

complete: this.refs.complete.checked

});

},

render: function(){

var labelStyle={

'text-decoration': this.state.complete?'line-through':''

};

return (

<span>

<label style={labelStyle}>

<input

type="checkbox"

checked={this.state.complete}

ref="complete"

onChange={this.handleChange}

/>

{this.props.text}

</label>

</span>

);

}

});

用法:

React.renderComponent(CrossoutCheckbox({text: "Text Text", complete: false}), mountNode);

解:

使用checked不会使基础值(显然)发生变化,因此不会调用onChange处理程序。切换到defaultChecked似乎可以解决此问题:

var CrossoutCheckbox = React.createClass({

getInitialState: function () {

return {

complete: (!!this.props.complete) || false

};

},

handleChange: function(){

this.setState({

complete: !this.state.complete

});

},

render: function(){

var labelStyle={

'text-decoration': this.state.complete?'line-through':''

};

return (

<span>

<label style={labelStyle}>

<input

type="checkbox"

defaultChecked={this.state.complete}

ref="complete"

onChange={this.handleChange}

/>

{this.props.text}

</label>

</span>

);

}

});

回答:

要获取复选框的选中状态,路径为:

this.refs.complete.state.checked

另一种方法是从传递给handleChange方法的事件中获取它:

event.target.checked

以上是 React Checkbox不发送onChange 的全部内容, 来源链接: utcz.com/qa/419756.html

回到顶部