Это поведение имеет мало общего с React, но больше связано с самим Javascript. Распространение событий происходит в три этапа,
Теперь в реакции реагируют события, написанные как onClick
, которые запускаются в цель и всплывают. Если вы хотите использовать фазу захвата, вы должны указать событие, например onClickCapture
, то есть добавив Capture
в качестве суффикса к событию.
Теперь в вашем случае,
<div onClick={() => this.props.callFunction()}>
<h2>Heading 1</h2>
<MyComponent1 />
<div>
onClick указывается для div, и, следовательно, если вы щелкнете в Заголовке 1, событие onClick будет вызвано h2
и всплывет до div
, где оно будет захвачено.
Теперь предположим, что вы щелкаете мышью по области, занятой MyComponent1
, в которой, как вы упомянули, в компоненте указан onClick, событие будет записано в div в MyComponent1
, для которого указана обработанная информация, и если вы не stopPropagation
в обработчике события this событие будет передано в родительский div, где оно будет перехвачено.
Теперь рассмотрим третий случай, где вы указываете onClick для MyComponent1
, как
<MyComponent1 onClick={() => this.props.callFunction()}/>
Здесь onClick в не обработчике на MyComponent1
, но передается как компонент для Component, и если вы не используете его в Component для присвоения div верхнего уровня, этот обработчик не будет работать
Ваш обработчик должен использоваться как
render() {
return (
<div onClick={this.props.onClick}>P{/* rest content */}</div>
)
}