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/render-props.md
+37-37Lines changed: 37 additions & 37 deletions
Original file line number
Diff line number
Diff line change
@@ -1,28 +1,28 @@
1
1
---
2
2
id: render-props
3
-
title: Właściwość Renderująca
3
+
title: Właściwość renderująca
4
4
permalink: docs/render-props.html
5
5
---
6
6
7
-
Określenie ["właściwość renderująca"](https://cdb.reacttraining.com/use-a-render-prop-50de598f11ce) odnosi się do techniki współdzielenia kodu pomiędzy komponentami Reacta, przy użyciu właściwości której wartością jest funkcja.
7
+
Określenie ["właściwość renderująca"](https://cdb.reacttraining.com/use-a-render-prop-50de598f11ce) odnosi się do techniki współdzielenia kodu pomiędzy komponentami reactowymi, przy użyciu właściwości, której wartością jest funkcja.
8
8
9
-
Komponent z renderowaną właściwością, przyjmuje funkcję która zwraca element Reacta a następnie wywołuje ją, nie implementując jednocześnie logiki do wyrenderowania tego komponentu.
9
+
Komponent z właściwością renderującą przyjmuje funkcję, zwracającą element reactowy, a następnie wywołuje ją, nie implementując jednocześnie logiki renderowania tego komponentu.
10
10
11
11
```jsx
12
12
<DataProvider render={data=> (
13
-
<h1>Cześć {data.target}</h1>
13
+
<h1>Cześć, {data.target}</h1>
14
14
)}/>
15
15
```
16
16
17
-
Biblioteki które używają właściwości renderujących to m.in. [React Router](https://reacttraining.com/react-router/web/api/Route/render-func) i [Downshift](https://github.com/paypal/downshift).
17
+
Biblioteki używające właściwości renderujących to m.in. [React Router](https://reacttraining.com/react-router/web/api/Route/render-func) i [Downshift](https://github.com/paypal/downshift).
18
18
19
-
W tym dokumencie, przedyskutujemy dlaczego renderowanie właściwości jest przydatne i jak napisać je samemu.
19
+
W tym dokumencie przedyskutujemy przydatność właściwości renderujących i dowiemy się, jak napisać je samemu.
20
20
21
-
## Użycie Właściwości Renderującej do Zagadnień-przecinających(ang. *Cross-Cutting Concerns*) {#use-render-props-for-cross-cutting-concerns}
21
+
## Użycie właściwości renderujących przy zagadnieniach przekrojowych (ang. *cross-cutting concerns*) {#use-render-props-for-cross-cutting-concerns}
22
22
23
-
Komponenty są podstawową jednostką reużywalności kodu w Reakcie, jednak nie zawsze oczywistością jest jak współdzielić stan lub zachowanie enkapsulowane przez jeden komponent, podczas gdy inne komponenty mogą potrzebować tego samego stanu.
23
+
Komponenty są podstawową jednostką reużywalności kodu w Reakcie. Nie zawsze jednak jest oczywiste, jak należy współdzielić stan czy zachowanie enkapsulowane przez jeden komponent, tak aby miały do nich dostęp inne komponenty.
24
24
25
-
Dla przykładu, poniższy komponent śledzi pozycje myszki w aplikacji webowej:
25
+
Dla przykładu, poniższy komponent śledzi pozycje myszki w aplikacji internetowej:
26
26
27
27
```js
28
28
classMouseTrackerextendsReact.Component {
@@ -50,14 +50,14 @@ class MouseTracker extends React.Component {
50
50
}
51
51
```
52
52
53
-
Podczas gdy kursor przemieszcza się po ekranie, komponent wyświetla jego koordynaty (x, y) wewnątrz `<p>`.
53
+
Podczas gdy kursor przemieszcza się po ekranie, komponent wyświetla jego koordynaty (x, y) wewnątrz znacznika `<p>`.
54
54
55
-
Pytanie brzmi: Jak użyć ponownie tego zachowania w innym komponencie? Innymi słowy, jeżeli inny komponent potrzebuje wiedzieć o pozycji kursora, czy możemy enkapsulować to zachowanie tak abyśmy mogli łatwo współdzielić z tym komponentem?
55
+
Pytanie brzmi: jak użyć ponownie tego zachowania w innym komponencie? Innymi słowy, jeżeli inny komponent potrzebuje wiedzieć o pozycji kursora, czy możemy enkapsulować to zachowanie tak, abyśmy mogli łatwo współdzielić je z tym komponentem?
56
56
57
-
Odkąd komponenty są podstawową jednostką reużywalności w Reakcie, spróbujmy zrefaktoryzować trochę kod, aby użyć komponentu`<Mouse>` który enkapsuluje zachowanie które musimy użyć gdzieś indziej.
57
+
Ponieważ komponenty są podstawową jednostką reużywalności w Reakcie, spróbujmy zrefaktoryzować trochę powyższy kod, tak aby wykorzystać komponent`<Mouse>`, który enkapsuluje zachowanie wymagane przez inny komponent.
58
58
59
59
```js
60
-
// Komponent <Mouse> enkapsuluje zachowanie którego potrzebujemy...
60
+
// Komponent <Mouse> enkapsuluje zachowanie, którego potrzebujemy...
61
61
classMouseextendsReact.Component {
62
62
constructor(props) {
63
63
super(props);
@@ -97,9 +97,9 @@ class MouseTracker extends React.Component {
97
97
98
98
Teraz komponent `<Mouse>` enkapsuluje wszystkie zachowania związane z nasłuchiwaniem na zdarzenia `mousemove` i przechowuje pozycję kursora (x, y), jednak nie jest jeszcze w pełni reużywalny.
99
99
100
-
Dla przykładu, powiedzmy że mamy komponent `<Cat>` który renderuje obrazek kota goniącego myszkę na ekranie. Moglibyśmy użyć właściwości `<Cat mouse={{ x, y }}>` aby przekazać komponentowi koordynaty kursora, tak aby wiedział gdzie umieścić obrazek kota.
100
+
Dla przykładu, powiedzmy że mamy komponent `<Cat>` który renderuje obrazek kota goniącego myszkę na ekranie. Moglibyśmy użyć właściwości `<Cat mouse={{ x, y }}>` aby przekazać komponentowi koordynaty kursora, tak aby wiedział, gdzie umieścić obrazek kota.
101
101
102
-
Początkowo, możesz chcieć wyrenderować komponent `<Cat>`*wewnątrz metody `render` komponentu `<Mouse>`*, w ten sposób:
102
+
Początkowo możesz chcieć wyrenderować komponent `<Cat>`*wewnątrz metody `render` komponentu `<Mouse>`*, na przykład w ten sposób:
103
103
104
104
```js
105
105
classCatextendsReact.Component {
@@ -132,7 +132,7 @@ class MouseWithCat extends React.Component {
132
132
{/*
133
133
Moglibyśmy w tym miejscu po prostu zamienić <p> na <Cat> ... ale później
za każdym razem gdy chcielibyśmy go użyć, dlatego też <MouseWithCat>
135
+
za każdym razem, gdy chcielibyśmy go użyć, dlatego też <MouseWithCat>
136
136
nie jest jeszcze naprawdę reużywalny.
137
137
*/}
138
138
<Cat mouse={this.state} />
@@ -153,9 +153,9 @@ class MouseTracker extends React.Component {
153
153
}
154
154
```
155
155
156
-
To podejście zadziałałoby w naszym specyficznym przypadku, ale nie osiągneliśmy prawdziwego celu, jakim jest enkapsulacja zachowania w taki sposób aby było ono reużywalne. Teraz, za każdym razem gdy potrzebowalibyśmy pozycji myszki dla innego przypadku, musimy stworzyć nowy komponent (innymi słowy kolejny `<MouseWithCat>`) który wyrenderuje coś konkretnie dla przypadku użycia.
156
+
To podejście zadziałałoby w naszym specyficznym przypadku, ale nie osiągneliśmy prawdziwego celu, jakim jest enkapsulacja zachowania w taki sposób, aby można było je wykorzystywać wielokrotnie. Teraz za każdym razem, gdybyśmy potrzebowali pozycji myszki dla innego przypadku, musielibyśmy stworzyć nowy komponent (innymi słowy kolejny `<MouseWithCat>`), który wyrenderuje coś konkretnego dla danego przypadku.
157
157
158
-
To miejsce w którym renderowanie właściwości przychodzi z odsieczą. Zamiast na trwało zakodować (ang. *hard-coding*) `<Cat>` wewnątrz komponentu `<Mouse>` i zmieniać w ten sposób to co zostało wyrenderowane, możemy dostarczyć do komponentu `<Mouse>` właściwość będącą funkcją dynamiczne określającą co powinno zostać wyrenderowane.
158
+
I tutaj do akcji wkracza właściwość renderująca. Zamiast na stałe osadzać `<Cat>` wewnątrz komponentu `<Mouse>`, jednocześnie zmieniając wyrenderowany przez niego wynik, możemy dostarczyć do komponentu `<Mouse>` właściwość będącą funkcją. Funkcja ta w sposób dynamiczny będzie określać, co powinno zostać wyrenderowane.
159
159
160
160
```js
161
161
classCatextendsReact.Component {
@@ -187,7 +187,7 @@ class Mouse extends React.Component {
187
187
188
188
{/*
189
189
Zamiast używać statycznej reprezentacji tego co renderuje <Mouse>,
190
-
użyj właściwości `render` aby dynamicznie określić co wyrenderować.
190
+
użyj właściwości `render`, aby dynamicznie określić, co należy wyrenderować.
191
191
*/}
192
192
{this.props.render(this.state)}
193
193
</div>
@@ -209,17 +209,17 @@ class MouseTracker extends React.Component {
209
209
}
210
210
```
211
211
212
-
Teraz, zamiast faktycznie klonować komponent `<Mouse>` i trwale zakodowywać coś innego w jego metodzie `render`aby rozwiązać specyficzny przypadek użycia, dostarczamy właściwość `render`, którą komponent `<Mouse>` może użyć do dynamicznego określenia co ma zostać wyrenderowane.
212
+
Teraz, zamiast faktycznie klonować komponent `<Mouse>` i na stałe wpisywać coś innego w jego metodzie `render`dla poszczególnych przypadków, dostarczamy właściwość `render`, którą komponent `<Mouse>` może użyć do dynamicznego określenia renderowanego wyniku.
213
213
214
-
Bardziej konkretnie, **właściwość renderująca jest funkcją której komponent używa aby wiedzieć co wyrenderować.**
214
+
Konkretnie rzecz ujmując, **właściwość renderująca jest funkcją, której komponent używa, aby wiedzieć, co ma wyrenderować.**
215
215
216
-
Ta technika powoduje że zachowanie które chcemy współdzielić staje się niezwykle przenośne. Aby dostać to zachowanie, wyrenderuj komponent `<Mouse>` wraz z właściwością `render`, która mówi co ma zostać wyrenderowane z aktualną pozycją (x, y) kursora.
216
+
Ta technika powoduje, że zachowanie, które chcemy współdzielić, staje się niezwykle przenośne. Aby uzyskać to zachowanie, wyrenderuj komponent `<Mouse>` wraz z właściwością `render`, która określi, co powinno zostać wyrenderowane, biorąc pod uwagę aktualną pozycję (x, y) kursora myszy.
217
217
218
-
Jedną interesującą rzeczą o której warto wspomnieć podczas opisywania właściwości renderujących jest to że możesz zaimplementować większość [komponentów wyższego rzędu(ang. *higher-order components*)](/docs/higher-order-components.html) (HOC) używając zwykłego komponentu z właściwością renderującą. Dla przykładu, jeżeli preferujesz wykorzystać komponent wyższego rzędu `withMouse` zamiast komponentu `<Mouse>`, możesz z łatwością go stworzyć używając`<Mouse>` z właściwością renderującą:
218
+
Ciekawostką, o której warto wspomnieć podczas opisywania właściwości renderujących, jest to, że większość [komponentów wyższego rzędu(ang. *higher-order components*)](/docs/higher-order-components.html) (HOC) można zaimplementować przy użyciu zwykłego komponentu z właściwością renderującą. Dla przykładu, jeżeli preferujesz korzystanie z komponent wyższego rzędu `withMouse` zamiast komponentu `<Mouse>`, możesz z łatwością go stworzyć przy użyciu`<Mouse>` z właściwością renderującą:
219
219
220
220
```js
221
-
// Jeżeli z jakiegoś powodu naprawdę chcesz HOC, możesz go łatwo
222
-
// stworzyć używając zwykłego komponentu z właściwością renderującą!
221
+
// Jeżeli z jakiegoś powodu naprawdę potrzebujesz HOC-a, możesz go łatwo
222
+
// stworzyć, używając zwykłego komponentu z właściwością renderującą!
223
223
functionwithMouse(Component) {
224
224
returnclassextendsReact.Component {
225
225
render() {
@@ -233,11 +233,11 @@ function withMouse(Component) {
233
233
}
234
234
```
235
235
236
-
Użycie właściwości renderującej powoduje że jest możliwe użycie obu wzorców.
236
+
Użycie właściwości renderującej powoduje, że jest możliwe użycie obu wzorców.
237
237
238
-
## Używanie Właściwości innych niż `render` {#using-props-other-than-render}
238
+
## Używanie właściwości innych niż `render` {#using-props-other-than-render}
239
239
240
-
Ważne jest aby pamiętać że pomimo iż wzorzec jest nazywany "właściowość renderująca(ang. *render props*)" to nie musisz *używać właściowści o nazwanej`render` aby go stosować*. W zasadzie,[*każda* właściwość która jest funkcją, której komponent używa aby wiedzieć co wyrenderować jest technicznie "właściwością renderującą"](https://cdb.reacttraining.com/use-a-render-prop-50de598f11ce).
240
+
Pamiętaj, że pomimo iż wzorzec nosi nazwę "właściwości renderującej" (ang. *render prop*), nie musisz *używać właściwości o nazwie`render`, aby go zastosować*. W zasadzie [*każda* właściwość, która jest funkcją służącą do określenia, co powinno zostać wyrenderowane, jest technicznie rzecz ujmując "właściwością renderującą"](https://cdb.reacttraining.com/use-a-render-prop-50de598f11ce).
241
241
242
242
Pomimo że powyższe przykłady używają `render`, moglibyśmy po prostu użyć właściwości `children`!
243
243
@@ -247,7 +247,7 @@ Pomimo że powyższe przykłady używają `render`, moglibyśmy po prostu użyć
247
247
)}/>
248
248
```
249
249
250
-
Pamiętaj że właściwość`children` nie musi być nazwana na liście "atrybutów" twojego elementu JSX. Zamiast tego, możesz ją umieścić bezpośrednio *wewnątrz*elementu!
250
+
Pamiętaj że właściwości`children` nie musisz przekazywać na liście "atrybutów" twojego elementu JSX. Zamiast tego możesz ją umieścić bezpośrednio *wewnątrz*znacznika!
251
251
252
252
```js
253
253
<Mouse>
@@ -257,9 +257,9 @@ Pamiętaj że właściwość `children` nie musi być nazwana na liście "atrybu
257
257
</Mouse>
258
258
```
259
259
260
-
Możesz zauważyć wykorzystanie tej techniki w [react-motion](https://github.com/chenglou/react-motion) API.
260
+
Powyższa technika stosowana jest w bibliotece [react-motion](https://github.com/chenglou/react-motion).
261
261
262
-
Odkąd ta technika jest trochę niecodzienna, podczas projektowania swojego API, prawdopodobnie będziesz chciał jawnie określić w swoich `propTypes` że `children`powinien być funkcją.
262
+
Jako że ta technika wydaje się trochę niecodzienna, podczas projektowania swojego API prawdopodobnie zechcesz jawnie określić w `propTypes`komponentu, że właściwość `children`powinna być funkcją.
263
263
264
264
```js
265
265
Mouse.propTypes= {
@@ -269,11 +269,11 @@ Mouse.propTypes = {
269
269
270
270
## Ostrzeżenia {#caveats}
271
271
272
-
### Bądź ostrożny podczas używania Właściwości Renderujących z React.PureComponent {#be-careful-when-using-render-props-with-reactpurecomponent}
272
+
### Uważaj przy stosowaniu właściwości renderującej dla komponentów dziedziczących po React.PureComponent {#be-careful-when-using-render-props-with-reactpurecomponent}
273
273
274
-
Jeżeli stworzysz funkcję wewnątrz metody `render`, użycie właściowości renderującej może anulować korzyści płynące z użycia [`React.PureComponent`](/docs/react-api.html#reactpurecomponent). Dzieje się tak ponieważ płytkie porównanie dla nowych właściwości zawsze będzie zwracać wartość `false`, a w tym przypadku każde wywołanie `render` będzie generować nową wartość dla właściwości renderującej.
274
+
Jeżeli stworzysz funkcję wewnątrz metody `render`, użycie właściwości renderującej może zniwelować korzyści płynące z użycia [`React.PureComponent`](/docs/react-api.html#reactpurecomponent). Dzieje się tak ponieważ płytkie porównanie (ang. *shallow comparison*) dla nowych właściwości zawsze będzie zwracać wartość `false`, a w tym przypadku każde wywołanie `render` będzie generować nową wartość dla właściwości renderującej.
275
275
276
-
Dla przykładu, kontynując z komponentem `<Mouse>`, jeżeli `Mouse` rozszerzałaby `React.PureComponent` zamiast `React.Component`, nasz przykład wyglądałby tak:
276
+
Dla przykładu, kontynując z komponentem `<Mouse>`, jeżeli `Mouse` rozszerzałaby klasę `React.PureComponent` zamiast `React.Component`, nasz przykład wyglądałby tak:
277
277
278
278
```js
279
279
classMouseextendsReact.PureComponent {
@@ -299,9 +299,9 @@ class MouseTracker extends React.Component {
299
299
}
300
300
```
301
301
302
-
W tym przykładzie, za każdym razem gdy `<MouseTracker>` jest renderowany, generowana jest nowa funkcja jako wartość dla właściwości `<Mouse render>`, a zatem neguje efekt `<Mouse>` rozszerzającej w pierwszej kolejności `React.PureComponent`!
302
+
W tym przykładzie, za każdym razem gdy `<MouseTracker>` jest renderowany, generowana jest nowa funkcja jako wartość dla właściwości `<Mouse render>`. Zatem w pierwszej kolejności neguje to efekt rozszerzania `React.PureComponent` przez komponent `<Mouse>`!
303
303
304
-
Aby obejść ten problem, możesz zdefiniować właściowść jako metodę instancji, w ten sposób:
304
+
Aby obejść ten problem, możesz zdefiniować właściwość jako metodę instancji klasy:
305
305
306
306
```js
307
307
classMouseTrackerextendsReact.Component {
@@ -322,4 +322,4 @@ class MouseTracker extends React.Component {
322
322
}
323
323
```
324
324
325
-
W przypadkach gdy nie możesz zdefiniować właściwości statycznej (na przykład, dlatego że musisz domknąć właściwości komponentu i/lub jego stan), `<Mouse>` powinien rozszerzać `React.Component`.
325
+
W przypadkach gdy nie możesz zdefiniować właściwości statycznej (na przykład, dlatego że musisz domknąć właściwości komponentu i/lub jego stan), `<Mouse>` powinien rozszerzać klasę`React.Component`.
0 commit comments