2015-12-30 13 views
16

Szukam przykładu w obsłudze Bubbling i przechwytywanie w React.js. Znalazłem one with JavaScript, ale mam problem ze znalezieniem odpowiednika dla pliku React.js.Przykład Bubbling i przechwytywania w React.js

Jak powinienem utworzyć przykład Bubbling i Przechwytywanie w React.js?

+1

wydarzenie bulgotanie to pojęcie DOM określonego zdarzenia. Celem React jest odejście od DOM. Zrobiłbyś to w React, tworząc funkcje komponentu i przekazując je dzieciom poprzez rekwizyty – azium

+0

Zobacz [React events] (https://facebook.github.io/react/docs/events.html) i [React DOM listeners detektorów ] (https://facebook.github.io/react/tips/dom-event-listeners.html) –

Odpowiedz

40

Bubbling i przechwytywanie są obsługiwane przez React w taki sam sposób, jak opisano w specyfikacji DOM, z wyjątkiem tego, jak radzisz sobie z dołączaniem procedur obsługi.

Bubbling jest tak prosty, jak w przypadku normalnego API DOM; po prostu dołączyć obsługi do ewentualnego rodzica elementu, a wszelkie zdarzenia wywoływane na ten element będzie bańka do rodzica tak długo jak nie jest zatrzymany przez stopPropagation wzdłuż drogi:

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

Przechwytywanie jest tak samo proste, choć to jest mentioned only briefly in the docs. Wystarczy dodać Capture do obsługi zdarzeń nazwy właściwości:

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

W tym przypadku, jeśli handleClickViaCapturing rozmowy stopPropagation na razie onClick obsługi przycisk nie zostanie wywołana.

This JSBin powinien wykazać jak przechwytywanie, pęcherzyków i stopPropagation prace w React: https://jsbin.com/hilome/edit?js,output

+3

Co należy wziąć pod uwagę, wszystkie zdarzenia z javascript wanilii, na przykład z biblioteki, są wywoływane wcześniej. Bez względu na to, czy zarejestrujesz wydarzenie w fazie przechwytywania lub bubble. – Jodo

+0

Co jeśli chcę czegoś przeciwnego? Co mam zrobić, jeśli mam "onClick" dla rodzica i chcę wywołać tę funkcję nawet po kliknięciu dziecka? – Dane

+1

@ Dane To jest normalne bulgotanie zdarzeń, jak opisano w pierwszym z dwóch powyższych przykładów (blokada rodzica onClick jest wyzwalana po kliknięciu przycisku potomnego). –