Исходные кодыandbox от OP: https://codesandbox.io/s/y041zknrqv
Если приведенные выше кодыandbox правильно демонстрируют вашу реальную проблему, то ваша проблема в том, что вы запутались с event.stopPropagation
и event.preventDefault
Inи Parent1
, и Parent2
, вы предоставляете обработчик событий onClick
для контейнера div и реализует event.preventDefault
и event.stopPropagation
для обоих обработчиков.Итак, вот что происходит, когда вы устанавливаете флажок в первый раз:
- Флажок получает событие щелчка и обновляет состояние, в результате чего флажок = true.
- Событие вспыхивает до
Parent2
,Здесь onClick
запускает функцию handleClick
этого компонента. - в
handleClick
, event.preventDefault
останавливает действие браузера по умолчанию для этого события, то есть события будущих нажатий не будут вызывать флажок в то время как event.stopPropagation
не позволяет родительским компонентам запускать onClick
, то есть Parent1
будет немедленно никогда не получать событие щелчка.
А теперь, начиная со второго события щелчка и далеетолько Parent2
может получить и ответить.Его дети и его родители больше не будут ничего делать.Вы можете увидеть консольный журнал здесь: https://codesandbox.io/s/r75rp285xq
Итак, чтобы исправить вашу проблему, удалите event.preventDefault
из Parent2
s handleClick
.Если вы также хотите исправить поведение Parent1
, удалите event.preventDefault
из обоих компонентов и удалите event.stopPropagation
из Parent2