You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/content/learn/responding-to-events.md
+33-33Lines changed: 33 additions & 33 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,7 +4,7 @@ title: Obsługa zdarzeń
4
4
5
5
<Intro>
6
6
7
-
React pozwala nam dodać *procedury obsługi zdarzeń* (ang. _event handlers_) do naszego JSXa. Procedury obsługi zdarzeń to twoje własne funkcje, które zostaną wywołane w odpowiedzi na interakcje tj. klikanie, najeżdżanie, wybieranie pól tekstowych itp.
7
+
React pozwala nam dodać *procedury obsługi zdarzeń* (ang. _event handlers_) do naszego JSX-a. Procedury obsługi zdarzeń to twoje własne funkcje, które zostaną wywołane w odpowiedzi na interakcje takie jak klikanie, najeżdżanie kursorem, zaznaczanie pól tekstowych itp.
8
8
9
9
</Intro>
10
10
@@ -18,7 +18,7 @@ React pozwala nam dodać *procedury obsługi zdarzeń* (ang. _event handlers_) d
Aby dodać procedurę obsługi zdarzeń, najpierw zdefiniuj funkcję, a następnie [przekaż ją jako właściwość (ang. _prop_)](/learn/passing-props-to-a-component) do odpowiedniego tagu JSX. Na przykład, oto przycisk, który jeszcze nic nie robi:
21
+
Aby dodać procedurę obsługi zdarzeń, najpierw zdefiniuj funkcję, a następnie [przekaż ją jako właściwość (ang. _prop_)](/learn/passing-props-to-a-component) do odpowiedniego elementu JSX. Na przykład, oto przycisk, który jeszcze nic nie robi:
22
22
23
23
<Sandpack>
24
24
@@ -34,11 +34,11 @@ export default function Button() {
34
34
35
35
</Sandpack>
36
36
37
-
Możesz sprawić, aby pokazywał wiadomość po kliknięciu go przez użytkownika w tych trzech krokach:
37
+
Możesz sprawić, by po kliknięciu przez użytkownika przycisk pokazywał wiadomość, wykonując trzy kroki:
38
38
39
-
1. Zadeklaruj funkcję `handleClick`*wewnątrz*twojego komponentu `Button`.
39
+
1. Zadeklaruj funkcję `handleClick`*wewnątrz*swojego komponentu `Button`.
40
40
2. Zaimplementuj logikę wewnątrz tej funkcji (użyj `alert` by pokazać wiadomość).
41
-
3. Dodaj `onClick={handleClick}` do JSXa`<button>`.
41
+
3. Dodaj `onClick={handleClick}` do JSX-a`<button>`.
Zdefiniowana funkcja `handleClick`, która jest potem [przekazana jako właściwość](/learn/passing-props-to-a-component) do `<button>`, jest **procedurą obsługi zdarzeń.** Funkcje taka jak ta:
65
+
Zdefiniowana funkcja `handleClick`, która jest potem [przekazana jako właściwość](/learn/passing-props-to-a-component) do `<button>`, jest **procedurą obsługi zdarzeń.** Funkcje takie jak ta:
66
66
67
67
* Są zwykle definiowane *wewnątrz* komponentów
68
68
* Mają nazwy zaczynające się od `handle`, po których następuje nazwa zdarzenia.
69
69
70
70
Zgodnie z konwencją, nazwy funkcji obsługujących zdarzenia zazwyczaj zaczynają się od `handle`, po którym następuje nazwa zdarzenia. Często zobaczysz składnię taką jak `onClick={handleClick}`, `onMouseEnter={handleMouseEnter}` i podobne.
71
71
72
-
Oprócz tego, możesz zdefiniować procedurę obsługi zdarzeń w miejscu wywołania w JSX:
72
+
Możesz też zdefiniować procedurę obsługi zdarzeń w miejscu wywołania w JSX:
73
73
74
74
```jsx
75
75
<button onClick={functionhandleClick() {
@@ -85,7 +85,7 @@ Lub zwięźlej, używając funkcji strzałkowej:
85
85
}}>
86
86
```
87
87
88
-
Oba style dadzą ten sam rezultat. Ten sposób definiowania jest wygodny dla krótkich funkcji.
88
+
Wszystkie te sposoby dadzą ten sam rezultat. Ten sposób definiowania jest wygodny dla krótkich funkcji.
89
89
90
90
<Pitfall>
91
91
@@ -97,16 +97,16 @@ Funkcje przekazywane do procedury obsługi zdarzeń muszą być przekazywane, ni
97
97
98
98
Różnica jest subtelna. W pierwszym przykładzie funkcja `handleClick` jest przekazywana do procedury `onClick`. To mówi Reactowi, aby ją zapamiętał i wywołał tylko wtedy, gdy użytkownik naciśnie przycisk.
99
99
100
-
W drugim przykładzie `()` na końcu `handleClick()`*natychmiast* wykonuje funkcję podczas [renderowania](/learn/render-and-commit), bez żadnych kliknięć. Dzieje się tak, ponieważ JavaScript wewnątrz [JSXowych`{` i `}`](/learn/javascript-in-jsx-with-curly-braces) wykonuje się od razu.
100
+
W drugim przykładzie `()` na końcu `handleClick()`*natychmiast* wykonuje funkcję podczas [renderowania](/learn/render-and-commit), bez żadnych kliknięć. Dzieje się tak, ponieważ JavaScript wewnątrz [JSX-owych nawiasów`{` i `}`](/learn/javascript-in-jsx-with-curly-braces) wykonuje się od razu.
101
101
102
102
Gdy piszesz kod w jednej linii, ta sama pułapka czeka na ciebie w innej formie:
103
103
104
-
| przekazanie funkcji (correct) | wywołanie funkcji (nieprawidłowo) |
104
+
| przekazanie funkcji (prawidłowo)| wywołanie funkcji (nieprawidłowo) |
Przekazywanie kodu w lini, tak jak w poniższym przykładzie, nie uruchomi się na kliknięcie - wywoła się za każdym razem, gdy komponent się wyrenderuje:
109
+
Przekazywanie kodu w linii, tak jak w poniższym przykładzie, nie uruchomi się na kliknięcie - wywoła się za każdym razem, gdy komponent się wyrenderuje:
110
110
111
111
```jsx
112
112
// Ten alert wyskoczy, gdy komponent się renderuje, a nie gdy został naciśnięty!
@@ -132,7 +132,7 @@ W obu przypadkach to co chcesz przekazać, jest funkcją:
132
132
133
133
### Odczytywanie właściwości w procedurach obsługi zdarzeń {/*reading-props-in-event-handlers*/}
134
134
135
-
Ponieważ procedury są deklarowane wewnątrz komponentu, mają dostęp do jego właściwości. Oto przycisk, który po kliknięciu pokaże alert z właściwością `message`:
135
+
Ponieważ procedury obsługi zdarzeń są deklarowane wewnątrz komponentu, mają dostęp do jego właściwości. Oto przycisk, który po kliknięciu pokaże alert z właściwością `message`:
136
136
137
137
<Sandpack>
138
138
@@ -169,7 +169,7 @@ To pozwala tym dwóm przyciskom pokazywać różne wiadomości. Spróbuj je zmie
169
169
170
170
### Przekazywanie procedur obsługi zdarzeń jako właściwości {/*passing-event-handlers-as-props*/}
171
171
172
-
Często będziesz chcieć, aby komponent-rodzic zdefiniował dziecku procedurę obsługi zdarzeń. Przyjrzyj się przyciskom: w zależności od tego, gdzie użyjesz komponentu `Button`, możesz chcieć wykonać inną funkcję - być może jeden odtwarza film, a drugi dodaje obrazek?
172
+
Często będziesz chcieć, aby komponent nadrzędny zdefiniował dziecku procedurę obsługi zdarzeń. Przyjrzyj się przyciskom: w zależności od tego, gdzie użyjesz komponentu `Button`, możesz chcieć wykonać inną funkcję - być może jeden odtwarza film, a drugi dodaje obrazek?
173
173
174
174
Aby to zrobić, przekaż właściwość, którą komponent otrzymał od rodzica, jako procedura obsługi w taki sposób:
175
175
@@ -227,13 +227,13 @@ Tutaj komponent `Toolbar` renderuje `PlayButton` i `UploadButton`:
227
227
228
228
W końcu twój komponent `Button` akceptuje właściwość zwaną `onClick`. Przekazuje ją bezpośrednio do wbudowanego w przeglądarkę `<button>` z `onClick={onClick}`. Ten wycinek mówi Reactowi, aby wywołał ją na kliknięcie.
229
229
230
-
Jeśli używasz [systemów projektu](https://uxdesign.cc/everything-you-need-to-know-about-design-systems-54b109851969), często komponenty, takie jak przyciski, posiadają style, ale nie definiują zachowania. Zamiast tego, komponenty typu `PlayButton` czy `UploadButton` będą przekazywały w dół procedury obsługi zdarzeń.
230
+
Jeśli używasz [systemu projektowania (ang. _design system_)](https://uxdesign.cc/everything-you-need-to-know-about-design-systems-54b109851969), często komponenty, takie jak przyciski, posiadają style, ale nie definiują zachowania. Zamiast tego, komponenty typu `PlayButton` czy `UploadButton` będą przekazywały w dół procedury obsługi zdarzeń.
231
231
232
232
### Nazywanie właściwości procedur obsługi zdarzeń {/*naming-event-handler-props*/}
233
233
234
-
Komponenty wbudowane tj.`<button>` i `<div>` wspierają jedynie [nazwy zdarzeń przeglądarki](/reference/react-dom/components/common#common-props) jak `onClick`. Jednak, gdy budujesz własne komponenty, możesz nazywać ich właściwości procedur obsługi jakkolwiek chcesz.
234
+
Komponenty wbudowane, takie jak`<button>` i `<div>` wspierają jedynie [nazwy zdarzeń przeglądarki](/reference/react-dom/components/common#common-props) jak `onClick`. Jednak, gdy budujesz własne komponenty, możesz nazywać ich właściwości procedur obsługi jakkolwiek chcesz.
235
235
236
-
Według konwencji, właściwości procedur obsługi zdarzeń powinny zaczynać się od `on` i dużej litery tuż za nim.
236
+
Według konwencji, właściwości procedur obsługi zdarzeń powinny zaczynać się od `on` i dużej litery tuż po nim.
237
237
238
238
Na przykład, właściwość `onClick` komponentu `Button` mogłaby być nazwana `onSmash`:
W tym przykładzie `<button onClick={onSmash}>` pokazuje, że przeglądarkowy `<button>` (lowercase) nadal potrzebuje właściwości `onClick`, ale jej nazwa otrzymana przez twój własny komponent `Button` może być, jaka chcesz!
271
+
W tym przykładzie `<button onClick={onSmash}>` pokazuje, że przeglądarkowy `<button>` (lowercase) nadal potrzebuje właściwości `onClick`, ale jej nazwa otrzymana przez twój własny komponent `Button` może być jaka chcesz!
272
272
273
-
Gdy twój komponent wspiera wiele interakcji, możesz nazwać właściwości procedur obsługi zdarzeń zgodnie z pojęciami typowymi dla twojej aplikacji. Na przykład, ten komponent `Toolbar` otrzymuje procedury `onPlayMovie` i `onUploadImage`:
273
+
Gdy twój komponent wspiera wiele różnych interakcji, możesz nazwać właściwości procedur obsługi zdarzeń zgodnie z pojęciami typowymi dla twojej aplikacji. Na przykład, ten komponent `Toolbar` otrzymuje procedury `onPlayMovie` i `onUploadImage`:
Zwróć uwagę na to, że komponent `App` nie musi wiedzień*co*`Toolbar` zrobi z `onPlayMovie` lub `onUploadImage`. To szczegół w implementacji `Toolbar`. Tutaj, `Toolbar` przekazuje je niżej jako procedury `onClick` do swoich `Button`ów, ale później mogą również zostać wywołane skrótem klawiszowym. Nazywanie właściwości po interakcjach specyficznych dla aplikacji np. `onPlayMovie` pozwala ci wygodnie zmieniać, w jaki sposób będą później użyte.
315
+
Zwróć uwagę na to, że komponent `App` nie musi wiedzieć*co*`Toolbar` zrobi z `onPlayMovie` lub `onUploadImage`. To szczegół w implementacji `Toolbar`. Tutaj, `Toolbar` przekazuje je niżej jako procedury `onClick` do swoich komponentów `Button`, ale później mogą również zostać wywołane skrótem klawiszowym. Nazywanie właściwości po interakcjach specyficznych dla aplikacji np. `onPlayMovie` pozwala ci wygodnie zmieniać, w jaki sposób będą później użyte.
316
316
317
317
<Note>
318
318
@@ -322,9 +322,9 @@ Upewnij się, że używasz poprawnego tagu HTML dla swoich procedur obsługi zda
322
322
323
323
## Propagacja zdarzeń {/*event-propagation*/}
324
324
325
-
Procedury obsługi zdarzeń wyłapią również zdarzenia z któregokolwiek komponentu potomnego. Mówimy wtedy, że zdarzenie "bąbelkuje" (ang. _bubbles_) lub "propaguje" (ang. _propagates_) w górę drzewa: zaczyna się to tam, gdzie zdarzenie miało miejsce, a potem idzie w górę.
325
+
Procedury obsługi zdarzeń wyłapią również zdarzenia pochodzące z dowolnego komponentu potomnego. Mówimy wtedy, że zdarzenie "bąbelkuje" (ang. _bubbles_) lub "propaguje" (ang. _propagates_) w górę drzewa: zaczyna się to tam, gdzie zdarzenie miało miejsce, a potem idzie w górę.
326
326
327
-
Ten `<div>` zawiera dwa przyciski. Oba elementy`<div>`i każdy przycisk mają swoją własną obsługę `onClick`. Jak myślisz, która z nich zostanie uruchomiona, gdy naciśniesz przycisk?
327
+
Ten `<div>` zawiera dwa przyciski. Zarówno element`<div>`, jak i każdy z przycisków mają swoją własną obsługę `onClick`. Jak myślisz, która z nich zostanie uruchomiona, gdy naciśniesz przycisk?
328
328
329
329
<Sandpack>
330
330
@@ -355,7 +355,7 @@ button { margin: 5px; }
355
355
356
356
</Sandpack>
357
357
358
-
Naciskając na którykolwiek z przycisków, ich `onClick` uruchomi się jako pierwszy. Następnie wykona się `onClick` z nadrzędnego `<div>`a, zatem pojawią się 2 wiadomości. Jeśli naciśniesz stricte na pasek, jedynie `onClick``<div>`a zostanie uruchomiony
358
+
Naciskając na którykolwiek z przycisków, `onClick`przypisany do nich uruchomi się jako pierwszy. Następnie wykona się `onClick` z nadrzędnego elementu `<div>`, zatem pojawią się dwie wiadomości. Jeśli naciśniesz wprost na pasek, jedynie `onClick`elementu `<div>` zostanie uruchomiony.
359
359
360
360
<Pitfall>
361
361
@@ -365,7 +365,7 @@ W Reakcie przekazywane jest każde zdarzenie poza `onScroll`, które działa tyl
Procedury obsługi zdarzeń otrzymują jako jedyny argument **obiekt zdarzenia** (ang. _event object_). Zwyczajowo nazywany jest `e`, co pochodzi od angielskiego "event". Możesz go użyć do odczytu informacji o zdarzeniu
368
+
Procedury obsługi zdarzeń otrzymują jako jedyny argument **obiekt zdarzenia** (ang. _event object_). Zwyczajowo nazywany jest `e`, co pochodzi od angielskiego "event". Możesz go użyć do odczytu informacji o zdarzeniu.
369
369
370
370
Poza tym, taki obiekt pozwala zatrzymać propagację. Jeśli chcesz powstrzymać zdarzenie od dotarcia do komponentu nadrzędnego, musisz wywołać `e.stopPropagation()` jak w tym komponencie `Button`:
371
371
@@ -413,7 +413,7 @@ Gdy naciskasz przycisk:
413
413
414
414
1. React wywołuje procedurę `onClick` przekazaną do `<button>`.
415
415
2. Ta procedura, zdefiniowana w `Button`, wykonuje następujące czynności:
416
-
* Wywołuje `e.stopPropagation()`, powstrzymując obiekt przed przekazaniem dalej.
416
+
* Wywołuje `e.stopPropagation()`, powstrzymując zdarzenie przed przekazaniem dalej.
417
417
* Wywołuje funkcję `onClick`, która jest właściwością przekazaną z komponentu `Toolbar`.
418
418
3. Ta funkcja, zdefiniowana w komponencie `Toolbar`, wyświetla swój własny alert.
419
419
4. Ponieważ zatrzymaliśmy przekazanie, procedura `onClick` nadrzędnego elementu `<div>`*nie* uruchamia się.
@@ -439,7 +439,7 @@ Każde zdarzenie jest propagowane w trzech fazach:
3. Podróżuje w górę, wywołując wszystkie procedury `onClick`.
441
441
442
-
Przechwytywanie zdarzeń przydaje się przy tworzeniu np. routerów czy analityki, ale prawdopodobnie nie znajdzie dla niego szerszego zastosowania w kodzie aplikacji.
442
+
Przechwytywanie zdarzeń przydaje się przy tworzeniu np. routerów czy analityki, ale prawdopodobnie nie znajdziesz dla tego szerszego zastosowania w kodzie aplikacji.
443
443
444
444
</DeepDive>
445
445
@@ -462,11 +462,11 @@ function Button({ onClick, children }) {
462
462
463
463
Możesz również dodać więcej kodu do tej procedury, przed wywołaniem nadrzędnego `onClick`. Ten wzór pokazuje *alternatywę* dla propagacji. Pozwala ona komponentowi potomnemu zająć się zdarzeniem, podczas gdy ten nadrzędny może określić jakieś dodatkowe zachowanie. W przeciwieństwie do propagacji nie jest to automatyczne, ale plusem tego wzoru jest możliwość prostego podążania za całym ciągiem kodu, który wykonuje się jako wynik jakiegoś zdarzenia
464
464
465
-
Jeśli używając propagacji jest ci ciężko wyśledzić, które procedury są wykonywane i dlaczego, spróbuj tego podejścia.
465
+
Jeśli używając propagacji jest ci ciężko prześledzić, które procedury są wykonywane i dlaczego, spróbuj tego podejścia.
466
466
467
467
### Powstrzymywanie domyślnego zachowania {/*preventing-default-behavior*/}
468
468
469
-
Niektóre zdarzenia przeglądarki mają domyślne zachowanie powiązane z nim. Na przykład zdarzenie wysłania formularza, które następuje, gdy naciśnięty zostanie przycisk w jego wnętrzu, domyślnie przeładuje całą stronę:
469
+
Niektóre zdarzenia przeglądarki mają domyślne zachowanie powiązane z nimi. Na przykład zdarzenie wysłania formularza, które następuje, gdy naciśnięty zostanie przycisk w jego wnętrzu, domyślnie przeładuje całą stronę:
470
470
471
471
<Sandpack>
472
472
@@ -520,7 +520,7 @@ Nie myl `e.stopPropagation()` i `e.preventDefault()`. Oba są użyteczne, ale ni
520
520
521
521
Oczywiście! Procedury obsługi zdarzeń to idealne miejsce na efekty uboczne.
522
522
523
-
W przeciwieństwie do funkcji renderujących, procedury obsługi zdarzeń nie muszą być [czyste](/learn/keeping-components-pure), więc jest to świetne miejsce by coś *zmienić* - na przykład, wartość input'a w odpowiedzi na wpisywanie, lub listę po naciśnięciu przycisku. Jednakże, aby cokolwiek pozmieniać, musisz wpierw jakoś to przechować. W Reakcie używa się do tego [stanu, czyli pamięci komponentu](/learn/state-a-components-memory). Wszystkiego o tym nauczysz się na następnej stronie.
523
+
W przeciwieństwie do funkcji renderujących, procedury obsługi zdarzeń nie muszą być [czyste](/learn/keeping-components-pure), więc jest to świetne miejsce by coś *zmienić* - na przykład, wartość pola tekstowego w odpowiedzi na wpisywanie lub listę po naciśnięciu przycisku. Jednakże, aby cokolwiek pozmieniać, musisz wpierw jakoś to przechować. W Reakcie używa się do tego [stanu, czyli pamięci komponentu](/learn/state-a-components-memory). Wszystkiego o tym nauczysz się na następnej stronie.
524
524
525
525
<Recap>
526
526
@@ -569,7 +569,7 @@ export default function LightSwitch() {
569
569
570
570
<Solution>
571
571
572
-
Problemem jest to, że `<button onClick={handleClick()}>`_wywołuje_ funkcję `handleClick` zamiast ją _przekazywać_ podczas renderowania. Usunięcie `()`, aby przycisk został w formie `<button onClick={handleClick}>` naprawi bład:
572
+
Problem polega na tym, że `<button onClick={handleClick()}>`_wywołuje_ funkcję `handleClick` zamiast ją _przekazywać_ podczas renderowania. Usunięcie `()`, aby przycisk został w formie `<button onClick={handleClick}>` naprawi błąd:
573
573
574
574
<Sandpack>
575
575
@@ -594,7 +594,7 @@ export default function LightSwitch() {
594
594
595
595
</Sandpack>
596
596
597
-
Ewentualnie, możesz owinąć wywołanie funkcji w inną funkcję w taki sposób `<button onClick={() => handleClick()}>`:
597
+
Ewentualnie, możesz opakować wywołanie funkcji w inną funkcję w taki sposób `<button onClick={() => handleClick()}>`:
598
598
599
599
<Sandpack>
600
600
@@ -621,7 +621,7 @@ export default function LightSwitch() {
621
621
622
622
</Solution>
623
623
624
-
#### Podpinanie zdarzeń {/*wire-up-the-events*/}
624
+
#### Podłączanie zdarzeń {/*wire-up-the-events*/}
625
625
626
626
Komponent `ColorSwitch` renderuje przycisk. Powinien on zmieniać kolor strony. Podłącz go do procedury `onChangeColor`, którą otrzymuje od rodzica tak, aby kliknięcie przycisku faktycznie to zrobiło.
627
627
@@ -669,7 +669,7 @@ export default function App() {
669
669
<ColorSwitch onChangeColor={handleChangeColor} />
670
670
<br />
671
671
<br />
672
-
<h2>Kliknięć na stronie: {clicks}</h2>
672
+
<h2>Liczba kliknięć na stronie: {clicks}</h2>
673
673
</div>
674
674
);
675
675
}
@@ -728,7 +728,7 @@ export default function App() {
0 commit comments