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/composition-vs-inheritance.md
+30-30
Original file line number
Diff line number
Diff line change
@@ -1,22 +1,22 @@
1
1
---
2
2
id: composition-vs-inheritance
3
-
title: Composition vs Inheritance
3
+
title: Kompozycja a dziedziczenie
4
4
permalink: docs/composition-vs-inheritance.html
5
5
redirect_from:
6
6
- "docs/multiple-components.html"
7
7
prev: lifting-state-up.html
8
8
next: thinking-in-react.html
9
9
---
10
10
11
-
React has a powerful composition model, and we recommend using composition instead of inheritance to reuse code between components.
11
+
React posiada potężny model kompozycyjny, z którego zalecamy korzystać zamiast dziedziczenia, aby komponentów można było używać wielokrotnie.
12
12
13
-
In this section, we will consider a few problems where developers new to React often reach for inheritance, and show how we can solve them with composition.
13
+
W tej sekcji rozważymy kilka problemów, przy okazji których początkujący użytkownicy Reacta sięgają po dziedziczenie, a następnie pokażemy, jak rozwiązać je za pomocą kompozycji.
14
14
15
-
## Containment {#containment}
15
+
## Zawieranie {#containment}
16
16
17
-
Some components don't know their children ahead of time. This is especially common for components like `Sidebar`or`Dialog` that represent generic "boxes".
17
+
Niektóre komponenty nie wiedzą z góry, co będzie ich "dziećmi". Najczęściej dotyczy to komponentów takich jak `Sidebar`czy`Dialog`, które reprezentują "pojemniki" ogólnego użytku.
18
18
19
-
We recommend that such components use the special `children`prop to pass children elements directly into their output:
19
+
Zalecamy, aby komponenty tego typu korzystały ze specjalnego atrybutu `children`i przekazywały go bezpośrednio do renderowanej struktury:
20
20
21
21
```js{4}
22
22
function FancyBorder(props) {
@@ -28,28 +28,28 @@ function FancyBorder(props) {
28
28
}
29
29
```
30
30
31
-
This lets other components pass arbitrary children to them by nesting the JSX:
31
+
Pozwala to innym komponentom przekazywać dowolnych potomków poprzez zagnieżdżanie elementów JSX-owych:
32
32
33
33
```js{4-9}
34
34
function WelcomeDialog() {
35
35
return (
36
36
<FancyBorder color="blue">
37
37
<h1 className="Dialog-title">
38
-
Welcome
38
+
Witaj
39
39
</h1>
40
40
<p className="Dialog-message">
41
-
Thank you for visiting our spacecraft!
41
+
Dziękujemy za wizytę na naszym statku kosmicznym!
42
42
</p>
43
43
</FancyBorder>
44
44
);
45
45
}
46
46
```
47
47
48
-
**[Try it on CodePen](https://codepen.io/gaearon/pen/ozqNOV?editors=0010)**
48
+
**[Przetestuj kod na CodePen](https://codepen.io/gaearon/pen/ozqNOV?editors=0010)**
49
49
50
-
Anything inside the `<FancyBorder>`JSX tag gets passed into the `FancyBorder`component as a `children` prop. Since `FancyBorder`renders`{props.children}`inside a`<div>`, the passed elements appear in the final output.
50
+
Wszystko, co znajdzie się w JSX-owym znaczniku `<FancyBorder>`zostanie przekazane do komponentu `FancyBorder`poprzez atrybut `children`. Jako że `FancyBorder`renderuje`{props.children}`wewnątrz elementu`<div>`, właśnie w takim elemencie pojawią się ostatecznie przekazane komponenty.
51
51
52
-
While this is less common, sometimes you might need multiple "holes" in a component. In such cases you may come up with your own convention instead of using`children`:
52
+
Mimo że zdarza się to rzadziej, czasami trzeba wstawić do komponentu wiele takich "dziur". W takich przypadkach można wymyślić własną konwencję i używać jej zamiast`children`:
53
53
54
54
```js{5,8,18,21}
55
55
function SplitPane(props) {
@@ -78,15 +78,15 @@ function App() {
78
78
}
79
79
```
80
80
81
-
[**Try it on CodePen**](https://codepen.io/gaearon/pen/gwZOJp?editors=0010)
81
+
[**Przetestuj kod na CodePen**](https://codepen.io/gaearon/pen/gwZOJp?editors=0010)
82
82
83
-
React elements like `<Contacts />`and`<Chat />` are just objects, so you can pass them as props like any other data. This approach may remind you of "slots" in other libraries but there are no limitations on what you can pass as props in React.
83
+
Elementy reactowe, takie jak `<Contacts />`czy`<Chat />`, są zwykłymi obiektami, dlatego możesz przekazywać je poprzez atrybuty jak każdą inną wartość. To podejście może przypominać koncepcję "slotów" z innych bibliotek, lecz w Reakcie nie ma żadnych ograniczeń co do typu wartości przekazywanych w atrybutach.
84
84
85
-
## Specialization {#specialization}
85
+
## Specjalizacja {#specialization}
86
86
87
-
Sometimes we think about components as being "special cases" of other components. For example, we might say that a `WelcomeDialog`is a special case of`Dialog`.
87
+
Czasami wyobrażamy sobie, że niektóre komponenty są "specjalnymi przypadkami użycia" innych komponentów. Na przykład, można by powiedzieć, że `WelcomeDialog`jest specjalnym przypadkiem komponentu`Dialog`.
88
88
89
-
In React, this is also achieved by composition, where a more "specific" component renders a more "generic" one and configures it with props:
89
+
W Reakcie taką relację również można osiągnąć poprzez kompozycję, gdzie "wyspecjalizowany" komponent renderuje inny, bardziej ogólny komponent i konfiguruje go za pomocą odpowiednich atrybutów:
90
90
91
91
```js{5,8,16-18}
92
92
function Dialog(props) {
@@ -105,15 +105,15 @@ function Dialog(props) {
105
105
function WelcomeDialog() {
106
106
return (
107
107
<Dialog
108
-
title="Welcome"
109
-
message="Thank you for visiting our spacecraft!" />
108
+
title="Witaj"
109
+
message="Dziękujemy za wizytę na naszym statku kosmicznym!" />
110
110
);
111
111
}
112
112
```
113
113
114
-
[**Try it on CodePen**](https://codepen.io/gaearon/pen/kkEaOZ?editors=0010)
114
+
[**Przetestuj kod na CodePen**](https://codepen.io/gaearon/pen/kkEaOZ?editors=0010)
115
115
116
-
Composition works equally well for components defined as classes:
116
+
Kompozycja działa równie dobrze z komponentami klasowymi:
117
117
118
118
```js{10,27-31}
119
119
function Dialog(props) {
@@ -140,12 +140,12 @@ class SignUpDialog extends React.Component {
140
140
141
141
render() {
142
142
return (
143
-
<Dialog title="Mars Exploration Program"
144
-
message="How should we refer to you?">
143
+
<Dialog title="Program Eksploracji Marsa"
144
+
message="Jak powinniśmy się do Ciebie zwracać?">
145
145
<input value={this.state.login}
146
146
onChange={this.handleChange} />
147
147
<button onClick={this.handleSignUp}>
148
-
Sign Me Up!
148
+
Zapisz mnie!
149
149
</button>
150
150
</Dialog>
151
151
);
@@ -156,17 +156,17 @@ class SignUpDialog extends React.Component {
156
156
}
157
157
158
158
handleSignUp() {
159
-
alert(`Welcome aboard, ${this.state.login}!`);
159
+
alert(`Witaj na pokładzie, ${this.state.login}!`);
160
160
}
161
161
}
162
162
```
163
163
164
-
[**Try it on CodePen**](https://codepen.io/gaearon/pen/gwZbYa?editors=0010)
164
+
[**Przetestuj kod na CodePen**](https://codepen.io/gaearon/pen/gwZbYa?editors=0010)
165
165
166
-
## So What About Inheritance? {#so-what-about-inheritance}
166
+
## A co z dziedziczeniem? {#so-what-about-inheritance}
167
167
168
-
At Facebook, we use React in thousands of components, and we haven't found any use cases where we would recommend creating component inheritance hierarchies.
168
+
W Facebooku korzystamy z Reacta w tysiącach komponentów i nie znaleźliśmy jak dotąd żadnego przypadku użycia, w którym lepszym rozwiązaniem byłoby stworzenie hierarchii dziedziczenia.
169
169
170
-
Props and composition give you all the flexibility you need to customize a component's look and behavior in an explicit and safe way. Remember that components may accept arbitrary props, including primitive values, React elements, or functions.
170
+
Atrybuty i kompozycja dają wystarczającą dowolność w dostosowaniu zarówno wyglądu, jak i zachowania komponentu, w sposób jawny i bezpieczny. Pamiętaj, że komponenty mogą przyjmować atrybuty dowolnego rodzaju: typy podstawowe, elementy reactowe czy funkcje.
171
171
172
-
If you want to reuse non-UI functionality between components, we suggest extracting it into a separate JavaScript module. The components may import it and use that function, object, or a class, without extending it.
172
+
Jeśli planujesz wielokrotnie używać w różnych komponentach funkcjonalności niezwiązanej z renderowaniem, sugerujemy wydzielić ją do osobnego modułu javascriptowego. Wtedy komponenty będą mogły ją zaimportować bez rozszerzania, bez względu na to, czy to funkcja, obiekt czy klasa.
0 commit comments