Измените свое состояние, как показано ниже, чтобы установить флажок в объекте состояния:
из этого:
state = {
isAllSelected: false,
checked: {}
};
до:
надеюсь, что ваши данные выглядят так:
const options = [
{
name: "city",
value: "bangalore"
},
{
name: "city",
value: "chennai"
},
{
name: "city",
value: "delhi"
}
];
и
this.state = {
isAllSelected: false,
checked: options.reduce((r, a) => {
r[a.value] = false;
return r;
}, {}),
checkList: options
};
Теперь this.state.checked имеет obj вроде этого: {bangalore: false, chennai: false, delhi: false}
Теперь в событии onChange измените значение отмеченного объекта, как показано ниже:
onCheck(checkName, isChecked) {
let isAllChecked = (checkName === 'all' && isChecked);
let isAllUnChecked = (checkName === 'all' && !isChecked);
const checked = isChecked;
const newChecked = {...this.state.checked};
if(checkName === 'all' && isChecked) {
Object.keys(newChecked).forEach(v => newChecked[v] = true)
} else if(checkName === 'all' && !isChecked) {
checkName === 'all' && Object.keys(newChecked).forEach(v => newChecked[v] = false);
} else {
newChecked = { ...newChecked, [checkName]: checked };
}
let isAllCheckedNew = Object.keys(newChecked).every(function(k){ return newChecked[k] === true });
this.setState({
checked: newChecked,
isAllSelected: isAllCheckedNew || isAllChecked
});
Полный код демонстрации доступен здесь