TLDR: ব্যবহার defaultChecked পরিবর্তে টিক চিহ্ন দেন, কাজ jsbin ।
একটি সাধারণ চেকবক্স সেটআপ করার চেষ্টা করছে যা এটি চেক করা থাকলে তার লেবেল পাঠ্যকে অতিক্রম করবে। কিছু কারণের জন্য যখন আমি উপাদানটি ব্যবহার করি তখন হ্যান্ডেল চেঞ্জ বরখাস্ত হয় না। আমি কী ভুল করছি তা কি কেউ ব্যাখ্যা করতে পারেন?
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}