У меня есть пример рабочего вложенного флажка Я работаю над внедрением в мое приложение.Логика для флажков является достаточно функциональной, чтобы охватить эти 7 случаев
- Scenario - No children, no parent selected
- Select the parent -> select the parent and all children
- Select a child -> select that child and its parent
- Scenario - All children and the parent selected
- Select the parent -> deselect the parent and all children
- Select a child -> deselect only that child
- Scenario - Some children and the parent selected
- Select the parent -> select all unselected children
- Select a child -> select that child, parent remains selected
- Deselect last child -> deselect the child and deselect the parent
Проблема, с которой я сталкиваюсь, заключается в том, что в сценариях, когда дочерний элемент выбран или отменен, состояние родительского флажка обновляется, но фактическоевизуальное изменение флажка не происходит.
Из моего кода:
<Checkbox
disableRipple
edge="start"
checked={sub.checked}
onChange={() =>
this.handleCheckClick(sub.id, parentIndex)
}
/>
Компонент Material-UI <Checkbox />
находится внутри списка элементов, и каждый элемент имеетпоследующий список предметов со своими <Checkbox />
компонентами соответственно.Когда я выбираю родительский флажок списка, состояние корректно изменяется с помощью этого метода handleCheckClick()
, и состояние обновляется должным образом, и визуальное обновление происходит так, как вы думаете.
Когда ребенок нажимается,В идеальном случае родитель будет выбран, который находится в состоянии компонента реакции, но визуальный аспект изменения не происходит, несмотря на то, что состояние флажка checked
отображается на состояние.
Интересно то, что если я использую собственный ввод, как это:
<input
type="checkbox"
disableRipple
edge="start"
checked={sub.checked}
onChange={() =>
this.handleCheckClick(sub.id, parentIndex)
}
/>
Правильное поведение отображается как визуально, так и в состоянии (как это уже было).Я не уверен, является ли это ошибкой, характерной для Material-UI, или состоянием гонки, или что-то еще происходит, но я знаю, что логика в функции handleCheckClick()
является правильной, поскольку изменения отображаются правильно в состоянии реакции.