我想用复选框进行一些自定义,它看起来像这样:
所以我将自定义复选框包装到React组件中:
require('../../less/ck-checkbox.less');
var React = require('react');
var CkCheckbox = React.createClass({
propTypes: {
name: React.PropTypes.string,
text: React.PropTypes.string,
defaultChecked: React.PropTypes.bool,
onChange: React.PropTypes.func
},
getDefaultProps: function() {
return {
name: 'checkbox',
text: '',
defaultChecked: false,
onChange: function () {}
};
},
render: function() {
return (
<div className="ck-checkbox">
<label>
<input type="checkbox" name={this.props.name} ref="c" defaultChecked={this.props.defaultChecked} onChange={this.props.onChange.bind(this, this.refs.c.checked)}/>
<span className="icons">
<span className="icon-checked-o icon-true"></span>
<span className="icon-circle-o icon-false"></span>
</span>
{this.props.text.length > 0 ?
<span className="ck-checkbox-text">{this.props.text}</span> : null
}
</label>
</div>
);
}
});
module.exports = CkCheckbox;
我的容器是这样的:
var React = require('react');
var CkCheckbox = require('./CkCheckbox.js');
var Test = React.createClass({
render: function() {
return (
<div>
<CkCheckbox onChange={this._handleChange}/>
</div>
);
},
_handleChange: function(checked, e) {
console.log(checked)
}
});
module.exports = Test;
你可以看到,我试图在this.refs.c.checked
回调中绑定onChange
,但它不起作用。
那么,如何在_handleChange函数中的Test组件中获取我的自定义复选框的checked state
?
答案 0 :(得分:4)
在这种情况下,您不需要使用refs
,因为您可以从e
参数中获取已检查的属性
// CkCheckbox component
<input type="checkbox"
name={this.props.name}
defaultChecked={this.props.defaultChecked}
onChange={ this.props.onChange } />
// Test component
_handleChange: function(e) {
var checked = e.target.checked;
console.log(checked)
}
或者如果你想只传递checked
属性,你可以这样做
// CkCheckbox component
handleChange: function (e) {
this.props.onChange(e.target.checked);
},
<input type="checkbox"
name={this.props.name}
defaultChecked={this.props.defaultChecked}
onChange={ this.handleChange } />
// in Test component
_handleChange: function(checked) {
console.log(checked)
}
答案 1 :(得分:0)
这是一个简单的示例,您可以用来获取自定义值或复选框的值,还可以检查复选框是否被选中。
export default class SearchBoxContainer extends React.Component {
constructor(props) {
super(props);
this.state = {
boxAll: false
};
}
handleChange = event => {
this.setState({ boxAll: event.target.checked }, () => {
console.log("This returned true or false", this.state.boxAll);
});
};
render() {
return (
<div className="search-container">
<SearchBox />
<div className="filter-country">
<h1>Filter</h1>
<div className="filter-country-container">
<div>
<input
type="checkbox"
id="checkBoxUS"
name="US"
value="US"
onChange={this.handleChange}
/>
<label htmlFor="US">All Jobs</label>
</div>
</div>
</div>
</div>
);
}
}
重要的是要知道,在此示例中,我仅将“ setState()”回调用于演示目的,但是您可以通过prop或您喜欢的任何方法将值传递给其他组件。另外,选中此复选框后,该值将返回“ true”