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: content/docs/forwarding-refs.md
+12-12Lines changed: 12 additions & 12 deletions
Original file line number
Diff line number
Diff line change
@@ -4,29 +4,29 @@ title: Przekazywanie referencji
4
4
permalink: docs/forwarding-refs.html
5
5
---
6
6
7
-
Przekazywanie referencji (ang. "Ref forwarding") to technika wysyłania [referencji](/docs/refs-and-the-dom.html)
8
-
poprzez komponent do jednego z jego dzieci. Dla większości komopentów w aplikacji zazwyczaj nie jest to potrzebne.
9
-
Może jednak okazać się przydatne w niektórych przypdkach. W szczególności w wielokrotnie używanych komponentach bibliotecznych.
7
+
Przekazywanie referencji (ang. "Ref forwarding") to technika, w której [referencję](/docs/refs-and-the-dom.html)
8
+
do komponentu "podajemy dalej" do jego dziecka. Dla większości komponentów w aplikacji nie jest to potrzebne.
9
+
Może jednak okazać się przydatne w niektórych przypadkach. W szczególności w _wielokrotnie używanych_ komponentach bibliotecznych.
10
10
Najczęstsze scenariusze opisujemy poniżej.
11
11
12
12
## Przekazywanie referencji do komponentów DOM {#forwarding-refs-to-dom-components}
13
13
14
-
Rozważmy `FancyButton` - komponent, który renderuje natywny element DOM - przycisk (`button`):
14
+
Rozważmy `FancyButton` - komponent, który renderuje natywny element DOM - przycisk:
15
15
`embed:forwarding-refs/fancy-button-simple.js`
16
16
17
17
Komponenty reactowe ukrywają szczegóły swojej implementacji, w tym także wyrenderowany HTML.
18
-
Inne komponenty używające `FancyButton`**z reguły nie potrzebują**[mieć dosypozycji referencji](/docs/refs-and-the-dom.html) do wewnętrznego elementu `button`.
18
+
Inne komponenty używające `FancyButton`**z reguły nie potrzebują**[mieć dostępu do referencji](/docs/refs-and-the-dom.html) do wewnętrznego elementu `button`.
19
19
Jest to korzystne, gdyż zapobiega sytuacji, w której komponenty są za bardzo uzależnione od struktury drzewa DOM innych komponentów.
20
20
21
-
Taka enkapsulacja jest pożądana na poziomie aplikacji, w komponentach takich jak `FeedStory` czy `Comment`. Natomiast może się okazać to niewygodne w przypadku komponentów "wielokrotnego użytku", będących "liśćmi" drzewa takich, jak `FancyButton` albo `MyTextInput`. Takie komponenty często używane są na wszędzie w aplikacji w podobny sposób jak zwyczajne elementy DOM typu `button` i `input`. W wiązku z tym dostęp do ich DOM może okazać się konieczy, aby obsłużyć fokus, zaznaczenie, czy animacje.
21
+
Taka enkapsulacja jest pożądana na poziomie aplikacji, w komponentach takich jak `FeedStory` czy `Comment`. Natomiast może się okazać to niewygodne w przypadku komponentów wielokrotnego użytku, będących "liśćmi" drzewa. Np. `FancyButton` albo `MyTextInput`. Takie komponenty często używane są w wielu miejscach aplikacji w podobny sposób, jak zwyczajne elementy DOM typu `button` i `input`. W wiązku z tym bezpośredni dostęp do ich DOM może okazać się konieczy, aby obsłużyć fokus, zaznaczenie, czy animacje.
22
22
23
23
**Przekazywanie referencji jest opcjonalną funkcjonalnością, która pozwala komponentom wziąć referencję do nich przekazaną i "podać dalej" do swojego dziecka.**
24
24
25
25
W poniższym przykładzie `FancyButton` używa `React.forwardRef`, by przejąć przekazaną do niego referencję i podać ją dalej do elementu `button`, który renderuje:
Tym sposobem komponenty używające `FancyButton` mają referencję do znajdującego się w głębi elementu DOM i mogą w razie potrzeby operować na nim tak, jakby operowały bezpośrednio na elemencie `button`.
29
+
Tym sposobem komponenty używające `FancyButton` mają referencję do znajdującego się w głębi elementu `button`. Mogą więc w razie potrzeby operować na komponencie tak, jakby operowały bezpośrednio na natywnym elemencie DOM.
30
30
31
31
Oto krok po kroku - co wydarzyło się w przykładzie powyżej:
32
32
@@ -38,13 +38,13 @@ Oto krok po kroku - co wydarzyło się w przykładzie powyżej:
38
38
39
39
>Uwaga
40
40
>
41
-
>Drugi argument `ref` istnieje tylko, gdy definiujesz komponent przy pomocy wywołania `React.forwardRef`. Zwyczajna funkcja lub klasa nie dostanie argumentu `ref`, nawet jako typowej właściwości Reactowej (ang. "props").
41
+
>Drugi argument `ref` istnieje tylko, gdy definiujesz komponent przy pomocy wywołania `React.forwardRef`. Zwyczajna funkcja lub klasa nie dostanie argumentu `ref`, nawet jako typowej właściwości Reactowej ("props").
42
42
>
43
43
>Przekazywanie referencji nie jest ograniczone do elementów drzewa DOM. Możesz także przekazywać referencje do instancji komponentów klasowych.
44
44
45
45
## Uwaga dla autorów bibliotek komonentów {#note-for-component-library-maintainers}
46
46
47
-
**Jeśli zaczniesz używać `forwardRef` w swojej bibliotece komponentów, powinno być to trakotwane jako zmiana krytyczna (ang. "breaking change"). W efekcie bibliteka powinna być wydana w nowej "wersji głównej" (ang. "major version", "major release").** Jest tak, ponieważ najprawdopodobniej Twoja biblioteka zauważalnie zmieniła zachowanie (np. do czego przypinane są referencje i jakie typy są eksportowane), a to może popsuć działanie aplikacji, które zależne są od dawnego zachowania.
47
+
**Jeśli zaczniesz używać `forwardRef` w swojej bibliotece komponentów, powinno być to trakotwane jako zmiana krytyczna (ang. "breaking change"). W efekcie bibliteka powinna być wydana w nowej "wersji głównej" (ang. "major version", "major release").** Jest tak, ponieważ najprawdopodobniej Twoja biblioteka zauważalnie zmieniła zachowanie (np. inaczej przypinając referencje i eksportując inne typy). Może to popsuć działanie aplikacji, które są zależne od dawnego zachowania.
48
48
49
49
Stosowanie `React.forwardRef` warunkowo, gdy ono istnieje, także nie jest zalecane z tego samego powodu: zmienia to zachowanie biblioteki i może zepsuć działanie aplikacji użytkowników, gdy zmienią wersję Reacta.
50
50
@@ -54,7 +54,7 @@ Omawiana technika może okazać się wyjątkowo przydatna w [Komponentach Wyższ
54
54
55
55
`embed:forwarding-refs/log-props-before.js`
56
56
57
-
KWR `logProps` przekazuje wszystkie atrybuty do komponentu który owija, więc wyrenderowany wynik będzie taki sam. Na przykład możemy użyć tego KWRa do logowania atrybutów, które zostaną przekazane do naszego komponentu `FancyButton`:
57
+
KWR `logProps` przekazuje wszystkie atrybuty do komponentu, który opakowuje, więc wyrenderowany wynik będzie taki sam. Na przykład możemy użyć tego KWRa do logowania atrybutów, które zostaną przekazane do naszego komponentu `FancyButton`:
58
58
`embed:forwarding-refs/fancy-button.js`
59
59
60
60
Powyższe rozwiązanie ma jeden minus: referencje nie zostaną przekazane do komponentu. Dzieje się tak, ponieważ `ref` nie jest atrybutem. Tak jak `key`, jest on obsługiwany prez Reacta inaczej. Referencja będzie w tym wypadku odnosiła się do najbardziej zewnętrznego kontenera, a nie do owiniętego komponentu.
@@ -67,7 +67,7 @@ Na szczęście możemy wprost przekazać referencję do wewnętrznego komponentu
67
67
68
68
## Wyświetlanie własnej nazwy w narzędziach deweloperskich {#displaying-a-custom-name-in-devtools}
69
69
70
-
`React.forwardRef` przyjmuje funkcję renderującą. Narzędzia deweloperskie Reacta (ang. "React DevTools") uzywają tej funkcji do określenia, co pokazać jako komonent, który przekazuje referencję.
70
+
`React.forwardRef` przyjmuje funkcję renderującą. Narzędzia deweloperskie Reacta ("React DevTools") używają tej funkcji do określenia, jak pokazać komonent, który przekazuje referencję.
71
71
72
72
Przykładowo, następujący komponent w narzędziach deweloperskich wyświetli się jako "*ForwardRef*":
73
73
@@ -77,6 +77,6 @@ Jeśli nazwiesz funkcję renderującą, narzędzia deweloperskie uwzględnią t
0 commit comments