Skip to content

Commit 3753ffa

Browse files
Apply suggestions from code review
Co-authored-by: Dawid Sabat <[email protected]>
1 parent 6ba997d commit 3753ffa

File tree

1 file changed

+25
-25
lines changed

1 file changed

+25
-25
lines changed

src/content/learn/state-a-components-memory.md

+25-25
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ button {
153153

154154
Procedura obsługi zdarzenia `handleClick` aktualizuje lokalną zmienną `index`. Jednak dwie rzeczy uniemożliwiają zobaczenie tej zmiany:
155155

156-
1. **Lokalne zmienne nie są zachowywane między renderowaniami.** Gdy React renderuje ten komponent po raz drugi, renderuje go od zeranie uwzględnia żadnych zmian w lokalnych zmiennych.
156+
1. **Lokalne zmienne nie są zachowywane między renderowaniami.** Gdy React renderuje ten komponent po raz drugi, renderuje go od zeranie uwzględnia żadnych zmian w lokalnych zmiennych.
157157
2. **Zmiany w lokalnych zmiennych nie wywołają renderowania.** React nie zdaje sobie sprawy, że musi ponownie wyrenderować komponent z nowymi danymi.
158158

159159
Aby zaktualizować komponent nowymi danymi, muszą zajść dwie rzeczy:
@@ -188,9 +188,9 @@ const [index, setIndex] = useState(0);
188188

189189
`index` jest zmienną stanu a `setIndex` to funkcja ustawiająca stan.
190190

191-
> Składnia `[` i `]` nazywana jest [destrukturyzacją tablicy](https://javascript.info/destructuring-assignment) i pozwala na odczyt wartości z tablicy. Tablica zwrócona przez `useState` zawsze zawiera dokładnie dwa elementy.
191+
> Składnia `[` i `]` nazywana jest [destrukturyzacją tablicy](https://javascript.info/destructuring-assignment) i pozwala na odczyt wartości z tablicy. Tablica zwracana przez `useState` zawsze zawiera dokładnie dwa elementy.
192192
193-
Oto jak współpracują ze sobą w `handleClick`:
193+
Oto jak współpracują one ze sobą w `handleClick`:
194194

195195
```js
196196
function handleClick() {
@@ -347,7 +347,7 @@ Stan to tylko jedna z tych funkcji, inne hooki poznasz później.
347347

348348
### Anatomia `useState` {/*anatomy-of-usestate*/}
349349

350-
Kiedy wywołujesz [`useState`](/reference/react/useState), informujesz Reacta, że chcesz, aby ten komponent coś zapamiętał:
350+
Kiedy wywołujesz [`useState`](/reference/react/useState), informujesz Reacta, że chcesz, aby ten komponent coś zapamiętał:
351351

352352
```js
353353
const [index, setIndex] = useState(0);
@@ -366,17 +366,17 @@ Jedynym argumentem dla `useState` jest **początkowa wartość** zmiennej stanu.
366366
Za każdym razem, gdy twój komponent jest renderowany, `useState` zwraca tablicę zawierającą dwie wartości:
367367

368368
1. **Zmienną stanu** (`index`) z wartością, którą przechowujesz.
369-
2. **Funkcję ustawiającą stan** (`setIndex`), która może zaktualizować zmienną stanu i spowodować ponowne renderowanie komponentu przez Reacta.
369+
2. **Funkcję ustawiającą stan** (`setIndex`), która może zaktualizować zmienną stanu i spowodować ponowne renderowanie komponentu przez Reacta.
370370

371371
Oto jak to wygląda w praktyce:
372372

373373
```js
374374
const [index, setIndex] = useState(0);
375375
```
376376

377-
1. **Twój komponent renderuje się po raz pierwszy.** Ponieważ przekazałeś `0` do `useState` jako początkową wartość dla `index`, zwróci ono `[0, setIndex]`. React zapamiętuje, że `0` to najnowsza wartość stanu.
378-
2. **Aktualizujesz stan.** Kiedy użytkownik kliknie przycisk, wywołuje to `setIndex(index + 1)`. `index` wynosi `0`, więc wywołane zostanie `setIndex(1)`. To informuje Reacta, że teraz `index` wynosi `1` i wywołuje ponowny render.
379-
3. **Drugi render twojego komponentu.** React nadal widzi `useState(0)`, ale ponieważ React *pamięta*, że ustawiłeś `index` na `1`, zwraca zamiast tego `[1, setIndex]`.
377+
1. **Twój komponent renderuje się po raz pierwszy.** Ponieważ do `useState` przekazano `0` jako początkową wartość dla `index`, zwróci on `[0, setIndex]`. React zapamiętuje, że `0` to najnowsza wartość stanu.
378+
2. **Aktualizujesz stan.** Kiedy użytkownik kliknie przycisk, wywołuje to `setIndex(index + 1)`. `index` wynosi `0`, więc wywołane zostanie `setIndex(1)`. To informuje Reacta, że teraz `index` wynosi `1` i wywołuje ponowne renderowanie.
379+
3. **Drugie renderowanie twojego komponentu.** React nadal widzi `useState(0)`, ale ponieważ React *pamięta*, że ustawiono `index` na `1`, zwraca zamiast tego `[1, setIndex]`.
380380
4. I tak dalej!
381381

382382
## Nadawanie komponentowi wielu zmiennych stanu {/*giving-a-component-multiple-state-variables*/}
@@ -520,19 +520,19 @@ button {
520520

521521
</Sandpack>
522522

523-
Dobrym pomysłem jest posiadanie wielu zmiennych stanu, jeśli ich stan nie jest powiązany, jak w przypadku `index` i `showMore` w tym przykładzie. Jednak jeśli zauważysz, że często zmieniasz dwie zmienne stanu razem, może być łatwiej połączyć je w jedną. Na przykład, jeśli masz formularz z wieloma polami, wygodniej jest mieć jedną zmienną stanu przechowującą obiekt niż zmienną stanu dla każdego pola. Przeczytaj [dobieranie struktury stanu](/learn/choosing-the-state-structure) po więcej wskazówek.
523+
Dobrym pomysłem jest posiadanie wielu zmiennych stanu, jeśli ich stan nie jest powiązany, jak w przypadku `index` i `showMore` w tym przykładzie. Jednak jeśli zauważysz, że często zmieniasz dwie zmienne stanu razem, może być łatwiej połączyć je w jedną. Na przykład, jeśli masz formularz z wieloma polami, wygodniej jest mieć jedną zmienną stanu przechowującą obiekt niż zmienną stanu dla każdego pola. Przeczytaj [dobieranie struktury stanu](/learn/choosing-the-state-structure) po więcej wskazówek.
524524

525525
<DeepDive>
526526

527-
#### Jak React wie, który stan zwrócić? {/*how-does-react-know-which-state-to-return*/}
527+
#### Skąd React wie, który stan zwrócić? {/*how-does-react-know-which-state-to-return*/}
528528

529-
Być może zauważyłeś, że wywołanie `useState` nie otrzymuje żadnych informacji o tym, do *której* zmiennej stanu się odnosi. Nie ma żadnego "identyfikatora", który jest przekazywany do `useState`, więc jak React wie, którą zmienną stanu zwrócić? Czy polega to na jakiejś magii, jak analizowanie twoich funkcji? Odpowiedź brzmi nie.
529+
Być może zauważyłeś/aś, że wywołanie `useState` nie otrzymuje żadnych informacji o tym, do *której* zmiennej stanu się odnosi. Nie ma żadnego "identyfikatora", który jest przekazywany do `useState`, więc skąd React wie, którą zmienną stanu zwrócić? Czy polega on na jakiejś magii, jak analizowanie twoich funkcji? Odpowiedź brzmi: nie.
530530

531531
Zamiast tego, aby umożliwić ich zwięzłą składnię, hooki **opierają się na stabilnej kolejności wywołań przy każdym renderze tego samego komponentu.** Działa to dobrze w praktyce, ponieważ jeśli przestrzegasz zasady powyżej ("wywołuj hooki tylko na najwyższym poziomie"), hooki będą zawsze wywoływane w tej samej kolejności. Dodatkowo [plugin lintera](https://www.npmjs.com/package/eslint-plugin-react-hooks) wychwytuje większość błędów.
532532

533533
Wewnątrz Reacta, dla każdego komponentu przechowywana jest tablica par stanu. React utrzymuje również bieżący indeks pary, który jest ustawiony na `0` przed renderowaniem. Za każdym razem, gdy wywołujesz `useState`, React zwraca kolejną parę stanu i inkrementuje indeks. Możesz poczytać więcej o tym mechanizmie w artykule [React hooks: Not Magic, Just Arrays.](https://medium.com/@ryardley/react-hooks-not-magic-just-arrays-cd4f1857236e)
534534

535-
Ten przykład **nie używa Reacta** ale da ci wyobrażenie o tym, jak `useState` działa od środka:
535+
Ten przykład **nie używa Reacta**, ale da ci wyobrażenie o tym, jak `useState` działa od środka:
536536

537537
<Sandpack>
538538

@@ -544,7 +544,7 @@ let currentHookIndex = 0;
544544
function useState(initialState) {
545545
let pair = componentHooks[currentHookIndex];
546546
if (pair) {
547-
// To nie jest pierwszy render,
547+
// To nie jest pierwsze renderowanie,
548548
// więc para stanu już istnieje.
549549
// Zwróć ją i przygotuj się na następne wywołanie hooka.
550550
currentHookIndex++;
@@ -603,8 +603,8 @@ function updateDOM() {
603603
currentHookIndex = 0;
604604
let output = Gallery();
605605

606-
// Zaktualizuj DOM, aby pasował do wynikowego wyjścia.
607-
// To jest część, którą React wykonuje za Ciebie.
606+
// Zaktualizuj DOM, aby pasował do rezultatu.
607+
// To jest część, którą React wykonuje za ciebie.
608608
nextButton.onclick = output.onNextClick;
609609
header.textContent = output.header;
610610
moreButton.onclick = output.onMoreClick;
@@ -728,7 +728,7 @@ Nie musisz tego rozumieć, aby używać Reacta, ale możesz uznać to za pomocny
728728

729729
</DeepDive>
730730

731-
## Stan jest izolowany i prywatny. {/*state-is-isolated-and-private*/}
731+
## Stan jest izolowany i prywatny {/*state-is-isolated-and-private*/}
732732

733733
Stan jest lokalny dla instancji komponentu na ekranie. Innymi słowy, **jeśli renderujesz ten sam komponent dwa razy, każda kopia będzie miała całkowicie wyizolowany stan!** Zmiana jednego z nich nie wpłynie na drugi.
734734

@@ -893,9 +893,9 @@ button {
893893

894894
To właśnie sprawia, że stan różni się od zwykłych zmiennych, które możesz zadeklarować na początku swojego modułu. Stan nie jest powiązany z konkretnym wywołaniem funkcji ani miejscem w kodzie, ale jest "lokalny" dla konkretnego miejsca na ekranie. Wyrenderowano dwa komponenty `<Gallery />`, więc ich stan jest przechowywany osobno.
895895

896-
Zwróć również uwagę, że komponent `Page` nie "wie" nic o stanie `Gallery` ani nawet o tym, czy w ogóle go posiada. W przeciwieństwie do właściwości (ang. *props*) **stan jest całkowicie prywatny dla komponentu, który go deklaruje.** Komponent nadrzędny nie może go zmienić. Dzięki temu możesz dodać stan do dowolnego komponentu lub go usunąć, nie wpływając na resztę komponentów.
896+
Zwróć również uwagę, że komponent `Page` nie "wie" nic o stanie `Gallery` ani nawet o tym, czy w ogóle go posiada. W przeciwieństwie do właściwości (ang. *props*) **stan jest całkowicie prywatny dla komponentu, który go deklaruje.** Komponent nadrzędny nie może go zmienić. Dzięki temu możesz dodać stan do dowolnego komponentu lub go usunąć, nie wpływając na resztę komponentów.
897897

898-
Co jeśli chciałbyś, aby obie galerie miały zsynchronizowany stan? W Reakcie właściwym sposobem na to jest *usunięcie* stanu z komponentów potomnych i dodanie go do ich najbliższego wspólnego rodzica. Kolejne strony skupią się na organizowaniu stanu pojedynczego komponentu, ale wrócimy do tego tematu w rozdziale [Współdzielenie stanu między komponentami.](/learn/sharing-state-between-components)
898+
Co jeśli chcesz, aby obie galerie miały zsynchronizowany stan? W Reakcie właściwym sposobem na to jest *usunięcie* stanu z komponentów potomnych i dodanie go do ich najbliższego wspólnego rodzica. Kolejne strony skupią się na organizowaniu stanu pojedynczego komponentu, ale wrócimy do tego tematu w rozdziale [Współdzielenie stanu między komponentami.](/learn/sharing-state-between-components)
899899

900900
<Recap>
901901

@@ -1219,13 +1219,13 @@ img { width: 120px; height: 120px; }
12191219

12201220
</Sandpack>
12211221

1222-
Zauważ, jak `hasPrev` i `hasNext` są używane *zarówno* w zwróconym JSX jak i w obsługach zdarzeń! Ten przydatny wzorzec działa, ponieważ funkcje obsługi zdarzeń ["zamykają się"](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures) nad wszystkimi zmiennymi deklarowanymi podczas renderowania.
1222+
Zauważ, jak `hasPrev` i `hasNext` są używane *zarówno* w zwróconym JSX jak i w obsługach zdarzeń! Ten przydatny wzorzec działa, ponieważ funkcje obsługi zdarzeń ["zamykają się"](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures) nad wszystkimi zmiennymi deklarowanymi podczas renderowania.
12231223

12241224
</Solution>
12251225

12261226
#### Napraw zablokowane pola formularza {/*fix-stuck-form-inputs*/}
12271227

1228-
Kiedy wpisujesz dane w pola formularza, nic się nie pojawia. Wygląda to tak, jakby wartości wejściowe były „zablokowane” na pustych ciągach. `Wartość` pierwszego `<input>` jest ustawiona tak, aby zawsze pasowała do zmiennej `firstName` a `wartość` drugiego`<input>` jest ustawiona tak, aby zawsze pasowała do zmiennej `lastName`. Tak powinno być. Oba pola mają obsługiwane zdarzenie `onChange`, które próbuje zaktualizować zmienne na podstawie najnowszego wejścia użytkownika (`e.target.value`). Jednak zmienne wydają się nie "pamiętać" swoich wartości między renderami. Napraw to, używając zamiast tego zmiennych stanu.
1228+
Kiedy wpisujesz dane w pola formularza, nic się nie pojawia. Wygląda to tak, jakby wartości wejściowe były „zablokowane” na pustych ciągach. Dla pierwszego `<input>`, `value` jest ustawiony tak, aby zawsze pasował do zmiennej `firstName` a `value` drugiego `<input>` jest ustawiony tak, aby zawsze pasowała do zmiennej `lastName`. Tak powinno być. Oba pola mają obsługiwane zdarzenie `onChange`, które próbuje zaktualizować zmienne na podstawie najnowszych danych wejściowych użytkownika (`e.target.value`). Jednak zmienne wydają się nie "pamiętać" swoich wartości między renderowaniami. Napraw to, używając zamiast tego zmiennych stanu.
12291229

12301230
<Sandpack>
12311231

@@ -1274,7 +1274,7 @@ h1 { margin-top: 10px; }
12741274

12751275
<Solution>
12761276

1277-
Po pierwsze, zaimportuj `useState` z Reacta. Następnie zamień `firstName` i `lastName`na zmienne stanu zadeklarowane za pomocą `useState`. Na końcu zamień każde przypisanie `firstName = ...` na `setFirstName(...)`, oraz zrób to samo dla `lastName`. Nie zapomnij także zaktualizować `handleReset` aby przycisk resetowania mógł działać.
1277+
Po pierwsze, zaimportuj `useState` z Reacta. Następnie zamień `firstName` i `lastName`na zmienne stanu zadeklarowane za pomocą `useState`. Na końcu zamień każde przypisanie `firstName = ...` na `setFirstName(...)` oraz zrób to samo dla `lastName`. Nie zapomnij także zaktualizować `handleReset`, aby przycisk resetowania mógł działać.
12781278

12791279
<Sandpack>
12801280

@@ -1444,17 +1444,17 @@ export default function FeedbackForm() {
14441444

14451445
</Sandpack>
14461446

1447-
Spróbuj przenieść drugie wywołanie `useState` po warunku `if` i zauważ, jak to znowu powoduje błąd.
1447+
Spróbuj przenieść drugie wywołanie `useState` po warunku `if` i zauważ, jak to znowu powoduje błąd.
14481448

1449-
Jeśli Twój linter jest [skonfigurowany pod Reacta](/learn/editor-setup#linting), powinieneś zobaczyć błąd lintera, gdy popełnisz taki błąd. Jeśli nie widzisz błędu, gdy próbujesz uruchomić błędny kod lokalnie, musisz skonfigurować lintera dla swojego projektu.
1449+
Jeśli Twój linter jest [skonfigurowany pod Reacta](/learn/editor-setup#linting), powinien wyświetlić się błąd lintera, gdy popełnisz pomyłkę taką jak ta. Jeśli nie widzisz błędu, gdy próbujesz uruchomić błędny kod lokalnie, musisz skonfigurować lintera dla swojego projektu.
14501450

14511451
</Solution>
14521452

14531453
#### Usuń niepotrzebny stan {/*remove-unnecessary-state*/}
14541454

1455-
Kiedy przycisk jest kliknięty, ten przykład powinien zapytać o imię użytkownika, a następnie wyświetlić alert z powitaniem. Próbowałeś użyć stanu do przechowywania imienia, ale z jakiegoś powodu zawsze wyświetla się "Witaj, !".
1455+
Kiedy przycisk jest kliknięty, ten przykład powinien zapytać o imię użytkownika, a następnie wyświetlić alert z powitaniem. Próbowano użyć stanu do przechowywania imienia, ale z jakiegoś powodu zawsze wyświetla się "Witaj, !".
14561456

1457-
Aby naprawić ten kod, usuń niepotrzebną zmienną stanu. (Omówimy, [dlaczego to nie zadziałało](/learn/state-as-a-snapshot), później.)
1457+
Aby naprawić ten kod, usuń niepotrzebną zmienną stanu. (Omówimy, [dlaczego to nie zadziałało](/learn/state-as-a-snapshot) później.)
14581458

14591459
Czy możesz wyjaśnić, dlaczego ta zmienna stanu była niepotrzebna?
14601460

0 commit comments

Comments
 (0)