TLDR: चेक किए गए, jsbin के बजाय defaultChecked का उपयोग करें ।
एक साधारण चेकबॉक्स को सेटअप करने की कोशिश कर रहा है जो जाँचने पर इसके लेबल टेक्स्ट को पार कर जाएगा। किसी कारण से जब मैं घटक का उपयोग कर रहा हूं तो हैंडल चेंज नहीं हो रहा है। क्या कोई समझा सकता है कि मैं क्या गलत कर रहा हूं?
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);
उपाय:
चेक किए गए का उपयोग अंतर्निहित मूल्य को बदलने (जाहिरा तौर पर) नहीं देता है और इस प्रकार ऑनचेंज हैंडलर को कॉल नहीं करता है। डिफ़ॉल्ट पर स्विच करने से यह ठीक लगता है:
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
। fiddle jsfiddle.net/d10xyqu1
this.setState({checked: !this.state.checked})
आसान करने के लिए एक मूल्य की दुकान की तुलना में जोड़ता है । फिर चेक किए गए एट्रुब्यूट में एक टर्नरी ऑपरेटर:checked={this.state.checked ? 'checked': null}