TLDR: Sử dụng defaultChecked thay vì jsbin hoạt động, đã kiểm tra .
Cố gắng thiết lập một hộp kiểm đơn giản sẽ gạch bỏ văn bản nhãn của nó khi được chọn. Vì một số lý do, handChange không bị sa thải khi tôi sử dụng thành phần này. Bất cứ ai có thể giải thích những gì tôi đang làm sai?
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>
);
}
});
Sử dụng:
React.renderComponent(CrossoutCheckbox({text: "Text Text", complete: false}), mountNode);
Giải pháp:
Việc sử dụng đã chọn không để giá trị cơ bản thay đổi (rõ ràng) và do đó không gọi trình xử lý onChange. Chuyển sang defaultChecked dường như để khắc phục điều này:
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.getDOMNode().checked
. xem fiddle jsfiddle.net/d10xyqu1
this.setState({checked: !this.state.checked})
dễ dàng hơn là phải lưu trữ một giá trị. Sau đó, một nhà điều hành ternary trong attrubute đã kiểm tra:checked={this.state.checked ? 'checked': null}