React复选框未发送onChange

TLDR:使用defaultChecked而不是checked,工作jsbin

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

var CrossoutCheckbox=React.createClass({
getInitialState:函数(){
返回{
完成:(!!this.props.complete)| | false
};
},
handleChange:function(){
console.log('handleChange',this.refs.complete.checked);//永远不会被记录
这是我的国家({
完成:this.refs.complete.checked
});
},
render:function(){
标签式变种={
“文本装饰”:this.state.complete?'line-through':“”
};
返回(
<span>
<标签样式={labelStyle}>
<输入
type=“复选框”
选中={this.state.complete}
ref=“完成”
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:函数(){
返回{
完成:(!!this.props.complete)| | false
};
},
handleChange:function(){
这是我的国家({
完成:!this.state.complete
});
},
render:function(){
标签式变种={
“文本装饰”:this.state.complete?'line-through':“”
};
返回(
<span>
<标签样式={labelStyle}>
<输入
type=“复选框”
defaultChecked={this.state.complete}
ref=“完成”
onChange={this.handleChange}
/&燃气轮机;
{this.props.text}
</label>
</span>
);
}
});

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

this.refs.complete.state.checked

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

event.target.checked

发表评论