Допустим, у нас есть ключ для каждого input
, ключ для каждого checkbox
.
в этом случае у нас есть newsletter
и special_offers
сценарий, который я предлагаю, это иметь массив в состоянии:
- checkedBoxes
- для хранения значений имен ящиков, которые контролируют, разрешены или нет другие ящики.
и по умолчанию handleChangeCheck
, каждый раз, когда флажок установлен, мы помещаем его имя в массив.
handleChangeCheck = name => e => {
let newCheckedBoxes = [...this.state.checkedBoxes]//don't forget to add a default value for that in the state as an array.
//conditionally add or remove the items.
if(newCheckedBoxes.indexOf(name)){
newCheckedBoxes = newCheckedBoxes.filter(_name => _name !== name);
} else {
newCheckedBoxes.push(name);
}
e.target.checked && newCheckedBoxes.push(name)
this.setState({
[name]: e.target.checked,
checkedBoxes: newCheckedBoxes,
});
};
и в ваших условно отключенных ящиках.
<Checkbox
name="special_offers"
value={this.state.specialOffers}
onChange={handleChangeCheck('specialOffers')}
disabled={!this.state.checkedBoxes.includes('newsletter')}>
Sign up special offers
</Checkbox>