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
Handling events with React elements is very similar to handling events on DOM elements. There are some syntactic differences:
11
+
Obsługa zdarzeń w Reakcie przypomina tę z drzewa DOM. Istnieje jednak kilka różnic w składni:
12
12
13
-
*React events are named using camelCase, rather than lowercase.
14
-
*With JSX you pass a function as the event handler, rather than a string.
13
+
*Zdarzenia reactowe pisane są camelCasem, a nie małymi literami.
14
+
*W JSX jako uchwyt przekazywana jest funkcja, a nie łańcuch znaków.
15
15
16
-
For example, the HTML:
16
+
Na przykład, poniższy kod HTML:
17
17
18
18
```html
19
19
<buttononclick="activateLasers()">
20
-
Activate Lasers
20
+
Aktywuj lasery
21
21
</button>
22
22
```
23
23
24
-
is slightly different in React:
24
+
w Reakcie wygląda nieco inaczej::
25
25
26
26
```js{1}
27
27
<button onClick={activateLasers}>
28
-
Activate Lasers
28
+
Aktywuj lasery
29
29
</button>
30
30
```
31
31
32
-
Another difference is that you cannot return `false`to prevent default behavior in React. You must call`preventDefault` explicitly. For example, with plain HTML, to prevent the default link behavior of opening a new page, you can write:
32
+
Kolejna różnica polega na tym, że w Reakcie nie można zwrócić `false`w celu zapobiegnięcia wykonania domyślnej akcji. Należy jawnie wywołać`preventDefault`. Na przykład, w czystym HTML-u, aby zapobiec domyślnej akcji linku (otwarciu strony), można napisać:
33
33
34
34
```html
35
-
<ahref="#"onclick="console.log('The link was clicked.'); return false">
36
-
Click me
35
+
<ahref="#"onclick="console.log('Kliknięto w link.'); return false">
36
+
Kliknij mnie
37
37
</a>
38
38
```
39
39
40
-
In React, this could instead be:
40
+
W Reakcie, zamiast tego, należy napisać:
41
41
42
42
```js{2-5,8}
43
43
function ActionLink() {
44
44
function handleClick(e) {
45
45
e.preventDefault();
46
-
console.log('The link was clicked.');
46
+
console.log('Kliknięto w link.');
47
47
}
48
48
49
49
return (
50
50
<a href="#" onClick={handleClick}>
51
-
Click me
51
+
Kliknij mnie
52
52
</a>
53
53
);
54
54
}
55
55
```
56
56
57
-
Here,`e`is a synthetic event. React defines these synthetic events according to the [W3C spec](https://www.w3.org/TR/DOM-Level-3-Events/), so you don't need to worry about cross-browser compatibility. See the [`SyntheticEvent`](/docs/events.html) reference guide to learn more.
57
+
Zmienna`e`to zdarzenie syntetyczne (ang. *synthetic event*). React tworzy zdarzenia tego typu zgodnie ze [specyfikacją W3C](https://www.w3.org/TR/DOM-Level-3-Events/), dzięki czemu nie trzeba martwić się o kompatybilność z przeglądarkami. Po więcej informacji sięgnij do specyfikacji obiektu [`SyntheticEvent`](/docs/events.html).
58
58
59
-
When using React you should generally not need to call `addEventListener` to add listeners to a DOM element after it is created. Instead, just provide a listener when the element is initially rendered.
59
+
W kodzie reactowym nie ma potrzeby dodawania obserwatora zdarzenia (ang. *event listener*) do elementu DOM po jego utworzeniu, poprzez wywoływanie funkcji `addEventListener`. Zamiast tego, wystarczy przekazać go podczas pierwszego renderowania komponentu.
60
60
61
-
When you define a component using an [ES6 class](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes), a common pattern is for an event handler to be a method on the class. For example, this `Toggle`component renders a button that lets the user toggle between "ON" and "OFF" states:
61
+
Gdy komponent definiowany jest przy użyciu [klasy ze standardu ES6](https://developer.mozilla.org/pl/docs/Web/JavaScript/Reference/Classes), często definiuje się uchwyt zdarzenia jako metodę tej klasy. Na przykład, poniższy komponent `Toggle`wyświetli przycisk, który pozwala użytkownikowi przełączać się między stanami "WŁĄCZONY" i "WYŁĄCZONY":
62
62
63
63
```js{6,7,10-14,18}
64
64
class Toggle extends React.Component {
65
65
constructor(props) {
66
66
super(props);
67
67
this.state = {isToggleOn: true};
68
68
69
-
// This binding is necessary to make `this` work in the callback
69
+
// Poniższe wiązanie jest niezbędne do prawidłowego przekazania `this` przy wywołaniu funkcji
70
70
this.handleClick = this.handleClick.bind(this);
71
71
}
72
72
@@ -79,7 +79,7 @@ class Toggle extends React.Component {
[**Try it on CodePen**](http://codepen.io/gaearon/pen/xEmzGg?editors=0010)
94
+
[**Przetestuj kod na CodePen**](http://codepen.io/gaearon/pen/xEmzGg?editors=0010)
95
95
96
-
You have to be careful about the meaning of `this`in JSX callbacks. In JavaScript, class methods are not [bound](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind) by default. If you forget to bind `this.handleClick`and pass it to `onClick`, `this`will be `undefined` when the function is actually called.
96
+
Należy zwrócić szczególną uwagę na znaczenie `this`funkcjach zwrotnych (ang. *callbacks*) używanych w JSX. W JavaScripcie metody klasy nie są domyślnie [dowiązane](https://developer.mozilla.org/pl/docs/Web/JavaScript/Reference/Functions/Funkcje_strzalkowe) do instancji. Jeśli zapomnisz dowiązać metodę `this.handleClick`i przekażesz ją jako atrybut `onClick`, to `this`przy wywołaniu będzie miało wartość `undefined`.
97
97
98
-
This is not React-specific behavior; it is a part of [how functions work in JavaScript](https://www.smashingmagazine.com/2014/01/understanding-javascript-function-prototype-bind/). Generally, if you refer to a method without `()`after it, such as `onClick={this.handleClick}`, you should bind that method.
98
+
To zachowanie nie jest specyficzne dla Reacta; [tak właśnie działają funkcje w JavaScripcie](https://www.smashingmagazine.com/2014/01/understanding-javascript-function-prototype-bind/). Generalnie, jeśli odwołujesz się do metody bez `()`po nazwie, jak na przykład `onClick={this.handleClick}`, pamiętaj, aby zawsze dowiązywać ją do instancji.
99
99
100
-
If calling `bind` annoys you, there are two ways you can get around this. If you are using the experimental [public class fields syntax](https://babeljs.io/docs/plugins/transform-class-properties/), you can use class fields to correctly bind callbacks:
100
+
Jeśli denerwuje Cię ciągłe wywoływanie `bind`, istnieją dwa sposoby na obejście tego problemu. Jeśli używasz eksperymentalnej [składni publicznych pól klasy](https://babeljs.io/docs/plugins/transform-class-properties/), możesz dowiązać metody do instancji poprzez zadeklarowanie ich jako pola klasy:
101
101
102
102
```js{2-6}
103
103
class LoggingButton extends React.Component {
104
-
// This syntax ensures `this` is bound within handleClick.
105
-
// Warning: this is *experimental* syntax.
104
+
// Poniższy kod wymusza dowiązanie `this` wewnątrz handleClick.
105
+
// Uwaga: to jest składnia *eksperymentalna*.
106
106
handleClick = () => {
107
-
console.log('this is:', this);
107
+
console.log('this ma wartość:', this);
108
108
}
109
109
110
110
render() {
111
111
return (
112
112
<button onClick={this.handleClick}>
113
-
Click me
113
+
Kliknij mnie
114
114
</button>
115
115
);
116
116
}
117
117
}
118
118
```
119
119
120
-
This syntax is enabled by default in[Create React App](https://github.com/facebookincubator/create-react-app).
120
+
Powyższa składnia jest domyślnie włączona w[Create React App](https://github.com/facebookincubator/create-react-app).
121
121
122
-
If you aren't using class fields syntax, you can use an [arrow function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions) in the callback:
122
+
Jeśli nie chcesz używać tej składni, możesz skorzystać z [funkcji strzałkowej](https://developer.mozilla.org/pl/docs/Web/JavaScript/Reference/Functions/Funkcje_strzalkowe) (ang. *arrow function*):
123
123
124
124
```js{7-9}
125
125
class LoggingButton extends React.Component {
126
126
handleClick() {
127
-
console.log('this is:', this);
127
+
console.log('this ma wartość:', this);
128
128
}
129
129
130
130
render() {
131
-
// This syntax ensures `this` is bound within handleClick
131
+
// Poniższy kod wymusza dowiązanie `this` wewnątrz handleClick.
132
132
return (
133
133
<button onClick={(e) => this.handleClick(e)}>
134
-
Click me
134
+
Kliknij mnie
135
135
</button>
136
136
);
137
137
}
138
138
}
139
139
```
140
140
141
-
The problem with this syntax is that a different callback is created each time the `LoggingButton`renders. In most cases, this is fine. However, if this callback is passed as a prop to lower components, those components might do an extra re-rendering. We generally recommend binding in the constructor or using the class fields syntax, to avoid this sort of performance problem.
141
+
Problem z taką składnią polega na tym, że za każdym razem, gdy `LoggingButton`jest renderowany, tworzona jest nowa funkcja. W większości przypadków nie ma to większego znaczenia. Jeśli jednak będzie przekazywana do komponentów osadzonych głębiej w strukturze, będzie niepotrzebnie powodowała ich ponowne renderowanie. Zalecamy więc korzystanie ze składni pól klasy lub wiązanie metod w konstruktorze, aby uniknąć tego typu problemów z wydajnością.
142
142
143
-
## Passing Arguments to Event Handlers {#passing-arguments-to-event-handlers}
143
+
## Przekazywanie argumentów do uchwytów zdarzeń {#passing-arguments-to-event-handlers}
144
144
145
-
Inside a loop it is common to want to pass an extra parameter to an event handler. For example, if `id`is the row ID, either of the following would work:
145
+
Dość często, na przykład w pętli, potrzebujemy przekazać uchwytowi dodatkowy parametr. Na przykład, jeśli zmienna `id`zawierałaby identyfikator wiersza w tabeli, można by rozwiązać to na dwa sposoby:
The above two lines are equivalent, and use [arrow functions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions) and[`Function.prototype.bind`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind) respectively.
152
+
Obydwie linie robią to samo, przy użyciu, odpowiednio, [funkcji strzałkowej](https://developer.mozilla.org/pl/docs/Web/JavaScript/Reference/Functions/Funkcje_strzalkowe) oraz[`Function.prototype.bind`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind).
153
153
154
-
In both cases, the`e` argument representing the React event will be passed as a second argument after the ID. With an arrow function, we have to pass it explicitly, but with`bind`any further arguments are automatically forwarded.
154
+
W obydwóch przypadkach argument`e`, reprezentujący zdarzenie reactowe, zostanie przekazany jako drugi w kolejności, zaraz po identyfikatorze wiersza. W przypadku funkcji strzałkowej, musimy przekazać go jawnie, natomiast w`bind`kolejne argumenty są przekazywane do funkcji automatycznie.
0 commit comments