Skip to content

Commit 57a8443

Browse files
author
Bartłomiej Żuber
committed
hooks - dep array
1 parent af2bed4 commit 57a8443

File tree

1 file changed

+20
-20
lines changed

1 file changed

+20
-20
lines changed

content/docs/hooks-faq.md

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -578,48 +578,48 @@ W zależności od przypadku użycia, poniżej opisanych jest także kilka dodatk
578578
579579
Spójrzmy, dlaczego ma to znaczenie.
580580

581-
Jeżeli sprecyzujesz [listę zależności](/docs/hooks-reference.html#conditionally-firing-an-effect), ostatni argument dla `useEffect`, `useMemo`, `useCallback`, lub `useImperativeHandle`, musi zawierać wszystkie wartości, biorące udział w przepływie danych Reacta. Włączając w to właściwości, stan i wszystkie ich pochodne.
581+
Podczas gdy określasz [tablicę zależności](/docs/hooks-reference.html#conditionally-firing-an-effect), ostatni argument dla `useEffect`, `useMemo`, `useCallback`, lub `useImperativeHandle`, powinien zawierać wszystkie wartości, biorące udział w przepływie danych Reacta. Włączając w to właściwości, stan i wszystkie ich pochodne.
582582

583-
It is **only** safe to omit a function from the dependency list if nothing in it (or the functions called by it) references props, state, or values derived from them. This example has a bug:
583+
Jedynym **bezpiecznym** przypadkiem pominięcia argumentu w tablicy zależności jest, przekazanie funkcji, która w swoim wnętrzu nie ma odniesień do właściwości, stanu lub wartości z nich dziedziczących. Poniższy przykład zawiera błąd:
584584

585585
```js{5,12}
586586
function ProductPage({ productId }) {
587587
const [product, setProduct] = useState(null);
588588
589589
async function fetchProduct() {
590-
const response = await fetch('http://myapi/product' + productId); // Uses productId prop
590+
const response = await fetch('http://myapi/product' + productId); // Używa właściwości productId
591591
const json = await response.json();
592592
setProduct(json);
593593
}
594594
595595
useEffect(() => {
596596
fetchProduct();
597-
}, []); // 🔴 Invalid because `fetchProduct` uses `productId`
597+
}, []); // 🔴 Błąd ponieważ `fetchProduct` używa `productId`
598598
// ...
599599
}
600600
```
601601

602-
**The recommended fix is to move that function _inside_ of your effect**. That makes it easy to see which props or state your effect uses, and to ensure they're all declared:
602+
**Zalecanym sposobem naprawienia tego, jest przeniesienie funkcji do _wnętrzna_ efektu**. Dzięki temu łatwo możemy dostrzec, stan lub właściwości jakich używa efekt, możemy się wtedy upewnić że wszystkie z nich zostały zadeklarowane:
603603

604604
```js{5-10,13}
605605
function ProductPage({ productId }) {
606606
const [product, setProduct] = useState(null);
607607
608608
useEffect(() => {
609-
// By moving this function inside the effect, we can clearly see the values it uses.
609+
// Po przeniesienu funkcji do wnętrza efektu, możemy łatwo dostrzec, których wartości używa.
610610
async function fetchProduct() {
611611
const response = await fetch('http://myapi/product' + productId);
612612
const json = await response.json();
613613
setProduct(json);
614614
}
615615
616616
fetchProduct();
617-
}, [productId]); // ✅ Valid because our effect only uses productId
617+
}, [productId]); // ✅ Poprawnie, ponieważ efekt używa wyłacznie productId
618618
// ...
619619
}
620620
```
621621

622-
This also allows you to handle out-of-order responses with a local variable inside the effect:
622+
Pozwala to również na zapobieganie, niepoprawnym odpowiedziom, stosując zmienną lokalną wewnątrz efektu:
623623

624624
```js{2,6,10}
625625
useEffect(() => {
@@ -635,37 +635,37 @@ This also allows you to handle out-of-order responses with a local variable insi
635635
}, [productId]);
636636
```
637637

638-
We moved the function inside the effect so it doesn't need to be in its dependency list.
638+
Przenieśliśmy funkcję do wnętrza efektu, dlatego też nie musi się znajdować w tablicy zależności.
639639

640-
>Tip
640+
>Wskazówka
641641
>
642-
>Check out [this small demo](https://codesandbox.io/s/jvvkoo8pq3) and [this article](https://www.robinwieruch.de/react-hooks-fetch-data/) to learn more about data fetching with Hooks.
642+
>Aby dowiedzieć się więcej o pobieraniu danych za pomocą Hooków, sprawdź [ten przykład](https://codesandbox.io/s/jvvkoo8pq3) i [ten artykuł](https://www.robinwieruch.de/react-hooks-fetch-data/).
643643
644-
**If for some reason you _can't_ move a function inside an effect, there are a few more options:**
644+
**Jeżeli z jakichś przyczyn, _nie_ możesz przenieść funkcji do wnętrza efektu, istnieje kilka innych opcji:**
645645

646-
* **You can try moving that function outside of your component**. In that case, the function is guaranteed to not reference any props or state, and also doesn't need to be in the list of dependencies.
647-
* If the function you're calling is a pure computation and is safe to call while rendering, you may **call it outside of the effect instead,** and make the effect depend on the returned value.
648-
* As a last resort, you can **add a function to effect dependencies but _wrap its definition_** into the [`useCallback`](/docs/hooks-reference.html#usecallback) Hook. This ensures it doesn't change on every render unless *its own* dependencies also change:
646+
* **Możesz spróbować przenieść tę funkcję, poza swój komponent**. W tym przypadku, funkcja nie będzie odnosić się do żadnych właściwości czy stanu, dlatego też nie będzie potrzeby dodawania jej do tablicy zależności.
647+
* Jeżeli funkcja, którą wywołujesz, jest dotyczy czystych kalkulacji i można ją bezpiecznie wywołać podczas renderowania, możesz chcieć **wywołąć ją poza efektem i** uzależnić efekt od zwróconej przez nią wartości.
648+
* W ostateczności, możesz **dodać funkcję do zależności efektu poprzez _opakowanie jej definicji_**, korzystając z hooka [`useCallback`](/docs/hooks-reference.html#usecallback). Zapewnia to niezmienność podczas renderowania, dopóki nie zmieni się również *jej własna* tablica zależności:
649649

650650
```js{2-5}
651651
function ProductPage({ productId }) {
652-
// ✅ Wrap with useCallback to avoid change on every render
652+
// ✅ Opakowanie za pomocą useCallback, aby uniknąć zmian przy każdym renderowaniu to avoid change on every render
653653
const fetchProduct = useCallback(() => {
654-
// ... Does something with productId ...
655-
}, [productId]); // ✅ All useCallback dependencies are specified
654+
// ... Korzysta z productId ...
655+
}, [productId]); // ✅ Zdefiniowane zostały wszystkie zależności useCallback
656656
657657
return <ProductDetails fetchProduct={fetchProduct} />;
658658
}
659659
660660
function ProductDetails({ fetchProduct }) {
661661
useEffect(() => {
662662
fetchProduct();
663-
}, [fetchProduct]); // ✅ All useEffect dependencies are specified
663+
}, [fetchProduct]); // ✅ Zdefiniowane zostały wszystkie zależności useEffect
664664
// ...
665665
}
666666
```
667667

668-
Note that in the above example we **need** to keep the function in the dependencies list. This ensures that a change in the `productId` prop of `ProductPage` automatically triggers a refetch in the `ProductDetails` component.
668+
Zauważ że w powyższym przykładzie, **potrzebowaliśmy** przekazać funkcję do tablicy zależności. Dzięki temu, zmiana właściowści `productId` w `ProductPage`, będzie automatycznie uruchamiała ponowne pobranie danych w komponencie `ProductDetails`.
669669

670670
### What can I do if my effect dependencies change too often? {#what-can-i-do-if-my-effect-dependencies-change-too-often}
671671

0 commit comments

Comments
 (0)