Причина, по которой обе группы изменяются при щелчке чего-либо в одной из них, заключается в том, что обе группы используют одно и то же внутреннее состояние.
["group", "topGroup"].map(item => (
<div className="site-checkbox-all-wrapper">
<Checkbox
indeterminate={this.state.indeterminate}
onChange={this.onCheckAllChange}
checked={this.state.checkAll}
>
{item}
</Checkbox>
<CheckboxGroup
options={plainOptions}
value={this.state.checkedList}
onChange={this.onChange}
/>
</div>
));
Обе group
и topGroup
используют одинаковые this.state.checkList
state.
Самый простой способ решить эту проблему - извлечь каждую группу в отдельный компонент. Таким образом, они имеют свое собственное состояние отдельно друг от друга.
Вы также можете оставить один компонент, но вы должны управлять несколькими внутренние состояния. Например, вы можете использовать state = { checkList: [[], []] }
, где первый подмассив предназначен для хранения состояния group
, а второй под массив - для хранения состояния topGroup
.
Если группы являются динамическими c Вы можете просто map
над группами и создать свои состояния следующим образом:
state = { checkList: groups.map(() => []) };
Вам также потребуется управлять несколькими состояниями indeterminate
и checkAll
. Этого можно избежать, если вывести их из состояния checkList
. Например:
isIndeterminate(index) {
const checkList = this.state.checkList[index];
return checkList.length > 0 && checkList.length < plainOptions.length;
}
Это также позволит избежать конфликтного состояния, поскольку существует один источник правды.