2015-12-30 1 views
16

Я ищу пример при обработке Bubbling и Capturing в React.js. Я нашел one with JavaScript, но у меня возникли проблемы с поиском эквивалента для React.js.Пример для Bubbling and Capturing in React.js

Как мне создать пример для Bubbling и Capturing в React.js?

+1

пузыриться событие является понятие определенного события DOM. Все дело в том, чтобы уйти от DOM. Вы сделали бы это в Реактинге, создав функции компонента и передав их детям через реквизиты. – azium

+0

Посмотрите на [React events] (https://facebook.github.io/react/docs/events.html) и [React DOM event listeners ] (https://facebook.github.io/react/tips/dom-event-listeners.html) –

ответ

40

Bubbling и capture поддерживаются React так же, как описано в спецификации DOM, за исключением того, как вы собираетесь подключать обработчики.

Bubbling так же просто, как и с обычным API DOM; просто прикрепить обработчик к возможному родителя элемента, а также любые события вызвали на этот элемент будет пузыриться к родителю, пока она не остановилась через stopPropagation по пути:

<div onClick={this.handleClick}> 
    <button>Click me, and my parent's `onClick` will fire!</button> 
</div> 

Capturing столь же просто, хотя это mentioned only briefly in the docs. Просто добавьте Capture в обработчик события имя свойства:

<div onClickCapture={this.handleClickViaCapturing}> 
    <button onClick={this.handleClick}> 
    Click me, and my parent's `onClickCapture` will fire *first*! 
    </button> 
</div> 

В этом случае, если handleClickViaCapturing вызовы stopPropagation на событие, onClick обработчик этой кнопки не будет вызываться.

This JSBin должен показать, как захват, кипящий, и stopPropagation работы в React: https://jsbin.com/hilome/edit?js,output

+3

Что следует помнить, все события ванильного javascript, например из библиотеки, вызываются заранее. Независимо от того, зарегистрируете ли вы событие на этапе Capture или Bubble. – Jodo

+0

Что делать, если я хочу наоборот? Что делать, если у меня есть 'onClick' для родителя, и я хочу вызвать эту функцию, даже когда нажимается дочерний элемент? – Dane

+1

@Dane Это нормальное событие пузыря, как описано в первом из двух приведенных выше примеров (родительский div onClick запускается при нажатии кнопки дочернего элемента). –