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
*Hooks* are a new addition in React 16.8. They let you use state and other React features without writing a class.
9
+
*Hooki* są nowym dodatkiem w Reakcie 16.8. Pozwalają one używać stanu i innych funkcjonalności Reacta, bez użycia klas.
10
10
11
-
Hooks are JavaScript functions, but you need to follow two rules when using them. We provide a [linter plugin](https://www.npmjs.com/package/eslint-plugin-react-hooks) to enforce these rules automatically:
11
+
Hooki są javascriptowymi funkcjami, ale podczas korzystania z nich musisz pamiętać o dwóch ważnych zasadach. Stworzyliśmy [wtyczkę do lintera](https://www.npmjs.com/package/eslint-plugin-react-hooks), która automatycznie wymusza stosowanie tych zasad:
12
12
13
-
### Only Call Hooks at the Top Level {#only-call-hooks-at-the-top-level}
13
+
### Wywołuj hooki tylko z najwyższego poziomu kodu {#only-call-hooks-at-the-top-level}
14
14
15
-
**Don't call Hooks inside loops, conditions, or nested functions.**Instead, always use Hooks at the top level of your React function. By following this rule, you ensure that Hooks are called in the same order each time a component renders. That's what allows React to correctly preserve the state of Hooks between multiple `useState`and`useEffect`calls. (If you're curious, we'll explain this in depth [below](#explanation).)
15
+
**Nie wywołuj hooków wewnątrz pętli, instrukcji warunkowych czy zagnieżdżonych funkcji.**Korzystaj z hooków tylko z najwyższego poziomu kodu twoich komponentów funkcyjnych. Przestrzegając tej zasady, zyskujesz pewność, że hooki zostaną wywołane w tej samej kolejności, za każdym razem gdy komponent jest renderowany. To właśnie pozwala Reactowi na właściwe przechowywanie stanu pomiędzy kolejnymi wywołaniami `useState`i`useEffect`(Jeśli ciekawi cię ten temat, dogłębnie wyjaśnimy go [w kolejnym podrozdziale](#explanation).)
16
16
17
-
### Only Call Hooks from React Functions {#only-call-hooks-from-react-functions}
17
+
### Wywołuj hooki tylko w komponentach funkcyjnych {#only-call-hooks-from-react-functions}
18
18
19
-
**Don't call Hooks from regular JavaScript functions.**Instead, you can:
19
+
**Nie wywołuj hooków wewnątrz zwykłych javascriptowych funkcji.**Zamiast tego możesz:
20
20
21
-
* ✅ Call Hooks from React function components.
22
-
* ✅ Call Hooks from custom Hooks (we'll learn about them [on the next page](/docs/hooks-custom.html)).
21
+
* ✅ Wywoływać hooki wewnątrz reactowych komponentów funkcyjnych.
22
+
* ✅ Wywoływać hooki wewnątrz własnych hooków (więcej na ten temat dowiemy się [w następnym rozdziale](/docs/hooks-custom.html)).
23
23
24
-
By following this rule, you ensure that all stateful logic in a component is clearly visible from its source code.
24
+
Przestrzegając tej zasady, upewniasz się, że cała logika związana ze stanem komponentu jest wyraźnie widoczna w jego kodzie źródłowym.
25
25
26
-
## ESLint Plugin {#eslint-plugin}
26
+
## Wtyczka dla ESLinta {#eslint-plugin}
27
27
28
-
We released an ESLint plugin called[`eslint-plugin-react-hooks`](https://www.npmjs.com/package/eslint-plugin-react-hooks) that enforces these two rules. You can add this plugin to your project if you'd like to try it:
28
+
Wydaliśmy wtyczkę dla ESLinta o nazwie[`eslint-plugin-react-hooks`](https://www.npmjs.com/package/eslint-plugin-react-hooks), która wymusza stosowanie tych dwóch zasad. Jeśli chcesz ją wypróbować, możesz dodać ją do swojego projektu w następujący sposób:
29
29
30
30
```bash
31
31
npm install eslint-plugin-react-hooks
32
32
```
33
33
34
34
```js
35
-
//Your ESLint configuration
35
+
//Twoja konfiguracja ESLint
36
36
{
37
37
"plugins": [
38
38
// ...
39
39
"react-hooks"
40
40
],
41
41
"rules": {
42
42
// ...
43
-
"react-hooks/rules-of-hooks":"error", //Checks rules of Hooks
"react-hooks/rules-of-hooks":"error", //Sprawdza stosowanie zasad hooków
44
+
"react-hooks/exhaustive-deps":"warn"//Sprawdza zależności efektów
45
45
}
46
46
}
47
47
```
48
48
49
-
In the future, we intend to include this plugin by default into Create React App and similar toolkits.
49
+
W przyszłości zamierzamy dołączyć te wtyczkę do Create React App i podobnych narzędzi.
50
50
51
-
**You can skip to the next page explaining how to write [your own Hooks](/docs/hooks-custom.html) now.**On this page, we'll continue by explaining the reasoning behind these rules.
51
+
**Możesz teraz przejść do następnego rozdziału, gdzie wyjaśniamy, [jak pisać własne hooki](/docs/hooks-custom.html).**W tym rozdziale postaramy się uzasadnić, dlaczego narzucamy takie zasady.
52
52
53
-
## Explanation {#explanation}
53
+
## Wyjaśnienie {#explanation}
54
54
55
-
As we [learned earlier](/docs/hooks-state.html#tip-using-multiple-state-variables), we can use multiple State or Effect Hooks in a single component:
55
+
Jak [dowiedzieliśmy się wcześniej](/docs/hooks-state.html#tip-using-multiple-state-variables), w ramach pojedynczego komponentu możemy używać wielu hooków stanu i efektów:
56
56
57
57
```js
58
58
functionForm() {
59
-
// 1. Use the name state variable
59
+
// 1. Użyj zmiennej stanu do przechowania imienia
60
60
const [name, setName] =useState('Mary');
61
61
62
-
// 2. Use an effect for persisting the form
62
+
// 2. Użyj efektu, aby zapisać dane formularza
63
63
useEffect(functionpersistForm() {
64
64
localStorage.setItem('formData', name);
65
65
});
66
66
67
-
// 3. Use the surname state variable
67
+
// 3. Użyj zmiennej stanu do przechowania nazwiska
68
68
const [surname, setSurname] =useState('Poppins');
69
69
70
-
// 4. Use an effect for updating the title
70
+
// 4. Użyj efektu, aby zaktualizować tytuł strony
71
71
useEffect(functionupdateTitle() {
72
72
document.title= name +''+ surname;
73
73
});
@@ -76,63 +76,63 @@ function Form() {
76
76
}
77
77
```
78
78
79
-
So how does React know which state corresponds to which `useState` call? The answer is that **React relies on the order in which Hooks are called**. Our example works because the order of the Hook calls is the same on every render:
79
+
Skąd zatem React wie, jaką wartość stanu zwrócić przy kolejnych wywołaniach funkcji `useState`? Tajemnica tkwi w tym, że **React polega na kolejności, w jakiej hooki są wywoływane.** Nasz przykład zadziała, ponieważ kolejność wywoływania hooków jest taka sama przy każdym renderowaniu:
80
80
81
81
```js
82
82
// ------------
83
-
//First render
83
+
//Pierwsze renderowanie
84
84
// ------------
85
-
useState('Mary') // 1. Initialize the name state variable with 'Mary'
86
-
useEffect(persistForm) // 2. Add an effect for persisting the form
87
-
useState('Poppins') // 3. Initialize the surname state variable with 'Poppins'
88
-
useEffect(updateTitle) // 4. Add an effect for updating the title
85
+
useState('Mary') // 1. Zainicjalizuj zmienną stanu imienia wartością „Mary”
86
+
useEffect(persistForm) // 2. Dodaj efekt odpowiedzialny za przechowywanie danych formularza
87
+
useState('Poppins') // 3. Zainicjalizuj zmienną stanu nazwiska wartością „Poppins”
88
+
useEffect(updateTitle) // 4. Dodaj efekt odpowiedzialny za aktualizację tytułu
89
89
90
90
// -------------
91
-
//Second render
91
+
//Drugie renderowanie
92
92
// -------------
93
-
useState('Mary') // 1. Read the name state variable (argument is ignored)
94
-
useEffect(persistForm) // 2. Replace the effect for persisting the form
95
-
useState('Poppins') // 3. Read the surname state variable (argument is ignored)
96
-
useEffect(updateTitle) // 4. Replace the effect for updating the title
93
+
useState('Mary') // 1. Odczytaj zmienną stanu przechowującą imię (argument został zignorowany)
94
+
useEffect(persistForm) // 2. Zastąp efekt odpowiedzialny za przechowywanie danych
95
+
useState('Poppins') // 3. Odczytaj zmienną stanu przechowującą nazwisko (argument został zignorowany)
96
+
useEffect(updateTitle) // 4. Zastąp efekt odpowiedzialny za aktualizację tytułu
97
97
98
98
// ...
99
99
```
100
100
101
-
As long as the order of the Hook calls is the same between renders, React can associate some local state with each of them. But what happens if we put a Hook call (for example, the`persistForm` effect) inside a condition?
101
+
Tak długo, jak kolejność wywoływania hooków pozostaje taka sama pomiędzy kolejnymi renderowaniami, React może powiązać lokalny stan z każdym z nich. A co wydarzy się, jeśli umieścimy wywołanie hooka (na przykład efektu`persistForm`) wewnątrz instrukcji warunkowej?
102
102
103
103
```js
104
-
// 🔴 We're breaking the first rule by using a Hook in a condition
104
+
// 🔴 Łamiemy pierwszą zasadę, używając hooka wewnątrz instrukcji warunkowej
105
105
if (name !=='') {
106
106
useEffect(functionpersistForm() {
107
107
localStorage.setItem('formData', name);
108
108
});
109
109
}
110
110
```
111
111
112
-
The`name !== ''`condition is `true` on the first render, so we run this Hook. However, on the next render the user might clear the form, making the condition `false`. Now that we skip this Hook during rendering, the order of the Hook calls becomes different:
112
+
Warunek`name !== ''`jest spełniony przy pierwszym renderze, więc uruchamiany jest ten hook. Jednakże przy kolejnym renderze użytkownik może wyczyścić wartości formularza, powodując, że warunek nie będzie spełniony. Teraz, w związku z tym, że pominęliśmy hook podczas renderowania, kolejność wywoływania hooków zostaje zachwiana:
113
113
114
114
```js
115
-
useState('Mary') // 1. Read the name state variable (argument is ignored)
116
-
// useEffect(persistForm) // 🔴 This Hook was skipped!
117
-
useState('Poppins') // 🔴 2 (but was 3). Fail to read the surname state variable
118
-
useEffect(updateTitle) // 🔴 3 (but was 4). Fail to replace the effect
115
+
useState('Mary') // 1.Odczytaj zmienną stanu przechowującą imię (argument został zignorowany)
116
+
// useEffect(persistForm) // 🔴 Ten hook został pominięty!
117
+
useState('Poppins') // 🔴 2 (a był 3). Nie uda się odczytać zmiennej stanu
118
+
useEffect(updateTitle) // 🔴 3 (a był 4). Nie uda się zastąpić efektu
119
119
```
120
120
121
-
React wouldn't know what to return for the second`useState` Hook call. React expected that the second Hook call in this component corresponds to the `persistForm` effect, just like during the previous render, but it doesn't anymore. From that point, every next Hook call after the one we skipped would also shift by one, leading to bugs.
121
+
React nie wiedziałby, co zwrócić dla drugiego wywołania hooka`useState`. React spodziewał się, że drugie wywołanie hooka w tym komponencie będzie odpowiadało wywołaniu efektu `persistForm`, tak jak podczas poprzedniego renderowania. Nie jest to już jednak prawdą. Od tej chwili każde kolejne wywołanie hooka, po tym, jak jeden został pominięty, również przesunęłoby się o jeden, prowadząc do błędów.
122
122
123
-
**This is why Hooks must be called on the top level of our components.**If we want to run an effect conditionally, we can put that condition *inside* our Hook:
123
+
**Dlatego właśnie hooki muszą być wywoływane z najwyższego poziomu kodu komponentów.**Jeśli chcesz, żeby efekt działał pod jakimś warunkiem, możesz umieścić ten warunek *wewnątrz* hooka:
124
124
125
125
```js
126
126
useEffect(functionpersistForm() {
127
-
// 👍 We're not breaking the first rule anymore
127
+
// 👍 Tym razem nie łamiemy pierwszej zasady
128
128
if (name !=='') {
129
129
localStorage.setItem('formData', name);
130
130
}
131
131
});
132
132
```
133
133
134
-
**Note that you don't need to worry about this problem if you use the [provided lint rule](https://www.npmjs.com/package/eslint-plugin-react-hooks).**But now you also know *why* Hooks work this way, and which issues the rule is preventing.
134
+
**Zauważ, że nie musisz o tym pamiętać, jeśli użyjesz [dostarczonej przez nas reguły lintera](https://www.npmjs.com/package/eslint-plugin-react-hooks).**Teraz jednak wiesz także, *dlaczego* hooki działają w ten sposób i jakim problemom zapobiega stosowanie tej reguły.
135
135
136
-
## Next Steps {#next-steps}
136
+
## Kolejne kroki {#next-steps}
137
137
138
-
Finally, we're ready to learn about [writing your own Hooks](/docs/hooks-custom.html)! Custom Hooks let you combine Hooks provided by React into your own abstractions, and reuse common stateful logic between different components.
138
+
W końcu jesteśmy gotowi na to, aby nauczyć się [pisać własne hooki](/docs/hooks-custom.html)! Własne hooki pozwalają łączyć hooki dostarczone przez Reacta we własne abstrakcje i współdzielić logikę związaną ze stanem pomiędzy komponentami.
0 commit comments