Skip to content

Commit e11b36c

Browse files
author
pmartyniak
committed
Translate "Refs Forwarding" page
1 parent 6e2ef49 commit e11b36c

File tree

6 files changed

+25
-25
lines changed

6 files changed

+25
-25
lines changed

content/docs/forwarding-refs.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,29 @@ title: Przekazywanie referencji
44
permalink: docs/forwarding-refs.html
55
---
66

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.
1010
Najczęstsze scenariusze opisujemy poniżej.
1111

1212
## Przekazywanie referencji do komponentów DOM {#forwarding-refs-to-dom-components}
1313

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:
1515
`embed:forwarding-refs/fancy-button-simple.js`
1616

1717
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`.
1919
Jest to korzystne, gdyż zapobiega sytuacji, w której komponenty są za bardzo uzależnione od struktury drzewa DOM innych komponentów.
2020

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.
2222

2323
**Przekazywanie referencji jest opcjonalną funkcjonalnością, która pozwala komponentom wziąć referencję do nich przekazaną i "podać dalej" do swojego dziecka.**
2424

2525
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:
2626

2727
`embed:forwarding-refs/fancy-button-simple-ref.js`
2828

29-
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.
3030

3131
Oto krok po kroku - co wydarzyło się w przykładzie powyżej:
3232

@@ -38,13 +38,13 @@ Oto krok po kroku - co wydarzyło się w przykładzie powyżej:
3838

3939
>Uwaga
4040
>
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").
4242
>
4343
>Przekazywanie referencji nie jest ograniczone do elementów drzewa DOM. Możesz także przekazywać referencje do instancji komponentów klasowych.
4444
4545
## Uwaga dla autorów bibliotek komonentów {#note-for-component-library-maintainers}
4646

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.
4848

4949
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.
5050

@@ -54,7 +54,7 @@ Omawiana technika może okazać się wyjątkowo przydatna w [Komponentach Wyższ
5454

5555
`embed:forwarding-refs/log-props-before.js`
5656

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`:
5858
`embed:forwarding-refs/fancy-button.js`
5959

6060
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
6767

6868
## Wyświetlanie własnej nazwy w narzędziach deweloperskich {#displaying-a-custom-name-in-devtools}
6969

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ę.
7171

7272
Przykładowo, następujący komponent w narzędziach deweloperskich wyświetli się jako "*ForwardRef*":
7373

@@ -77,6 +77,6 @@ Jeśli nazwiesz funkcję renderującą, narzędzia deweloperskie uwzględnią t
7777

7878
`embed:forwarding-refs/wrapped-component-with-function-name.js`
7979

80-
Możesz nawet ustawić właściwość `displayName` funkcji tak, aby uwzględniała nazwę owijanego komponentu:
80+
Możesz nawet ustawić właściwość `displayName` funkcji tak, aby uwzględniała nazwę opakowanego komponentu:
8181

8282
`embed:forwarding-refs/customized-display-name.js`

examples/forwarding-refs/customized-display-name.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ function logProps(Component) {
77
return <LogProps {...props} forwardedRef={ref} />;
88
}
99

10-
// Give this component a more helpful display name in DevTools.
11-
// e.g. "ForwardRef(logProps(MyComponent))"
10+
// Nadajmy temu komponentowi nazwę, która będzie bardziej czytelna w narzędziach deweloperskich.
11+
// np. "ForwardRef(logProps(MyComponent))"
1212
// highlight-range{1-2}
1313
const name = Component.displayName || Component.name;
1414
forwardRef.displayName = `logProps(${name})`;

examples/forwarding-refs/fancy-button-ref.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ import FancyButton from './FancyButton';
33
// highlight-next-line
44
const ref = React.createRef();
55

6-
// The FancyButton component we imported is the LogProps HOC.
7-
// Even though the rendered output will be the same,
8-
// Our ref will point to LogProps instead of the inner FancyButton component!
9-
// This means we can't call e.g. ref.current.focus()
6+
// Komponent FancyButton, który zaimportowaliśmy jest tak naprawdę KWRem LogProps.
7+
// Mimo że wyświetlony rezultat będzie taki sam,
8+
// nasza referencja będzie wskazywała na LogProps zamiast na komponent FancyButton!
9+
// Oznacza to, że nie możemy wywołać np. metody ref.current.focus()
1010
// highlight-range{4}
1111
<FancyButton
1212
label="Click Me"

examples/forwarding-refs/fancy-button-simple-ref.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ const FancyButton = React.forwardRef((props, ref) => (
55
</button>
66
));
77

8-
// You can now get a ref directly to the DOM button:
8+
// Możesz teraz otrzymać bezpośrednią referencję do elementu „button:
99
const ref = React.createRef();
1010
<FancyButton ref={ref}>Click me!</FancyButton>;

examples/forwarding-refs/fancy-button.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class FancyButton extends React.Component {
66
// ...
77
}
88

9-
// Rather than exporting FancyButton, we export LogProps.
10-
// It will render a FancyButton though.
9+
// Zamiast FancyButton, exportujemy LogProps.
10+
// Jednak wyrenderowany zostanie FancyButton.
1111
// highlight-next-line
1212
export default logProps(FancyButton);

examples/forwarding-refs/log-props-after.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@ function logProps(Component) {
99
// highlight-next-line
1010
const {forwardedRef, ...rest} = this.props;
1111

12-
// Assign the custom prop "forwardedRef" as a ref
12+
// 2. Przypiszmy nasz atrybut "forwardedRef" jako referencję
1313
// highlight-next-line
1414
return <Component ref={forwardedRef} {...rest} />;
1515
}
1616
}
1717

18-
// Note the second param "ref" provided by React.forwardRef.
19-
// We can pass it along to LogProps as a regular prop, e.g. "forwardedRef"
20-
// And it can then be attached to the Component.
18+
// 1. Zwróć uwagę na drugi parametr "ref" dostarczony przez React.forwardRef.
19+
// Możemy go przekazać dalej do LogProps jako zwyczajny atrybut, np. "forwardedRef".
20+
// Następnie może on być przypisany do komponentu wewnątrz.
2121
// highlight-range{1-3}
2222
return React.forwardRef((props, ref) => {
2323
return <LogProps {...props} forwardedRef={ref} />;

0 commit comments

Comments
 (0)