, ( ) , . , .
, , componentDidMount API , .
constructor(props) {
super(props);
this.state = {
checkboxes: [],
filter: 'ALL'
};
}
componentDidMount() {
getData(response => {
this.setState({
checkboxes: response.body
});
});
}
, , checkbox DOM. , .map . .filter , .
function renderCheckboxes() {
const {checkboxes, filter} = this.state;
return checkboxes
.filter(checkbox =>
filter === 'ALL' ||
filter === 'CHECKED' && checkbox.checked ||
filter === 'UNCHECKED' && !checkbox.checked
)
.map((checkbox, index) =>
<div>
<label>
<input
type="checkbox"
checked={checkbox.checked}
onChange={toggleCheckbox.bind(this, index)}
/>
{checkbox.label}
</label>
</div>
);
}
, onChange, ? , checked, , . toggleCheckbox :
function toggleCheckbox(index) {
const {checkboxes} = this.state;
checkboxes[index].checked = !checkboxes[index].checked;
this.setState({
checkboxes
});
}
, :
function updateFilter(filter) {
this.setState({
filter
});
}
, render, , ( ):
render() {
return (
<div>
{renderCheckboxes.call(this)}
<div>
<h4>Filters ({this.state.filter})</h4>
<a href="#" onClick={updateFilter.bind(this, 'ALL')}>ALL</a>
|
<a href="#" onClick={updateFilter.bind(this, 'CHECKED')}>CHECKED</a>
|
<a href="#" onClick={updateFilter.bind(this, 'UNCHECKED')}>UNCHECKED</a>
</div>
</div>
);
}
- API:
https://jsbin.com/bageyudaqe/edit?js,output
, !