Skip to content

Commit bd9eacf

Browse files
authored
Merge branch 'master' into conditional-rendering
2 parents f80fa85 + ced3ed5 commit bd9eacf

15 files changed

+213
-215
lines changed

content/community/conferences.md

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,6 @@ June 21, 2019 Chicago, Illinois USA
5252

5353
[Website](https://reactloop.com) - [Twitter](https://twitter.com/ReactLoop)
5454

55-
### React Week '19 {#RWNY19}
56-
July 15-21, 2019. New York City, USA
57-
58-
[Website](https://reactweek.nyc) - [Twitter](https://twitter.com/ReactWeek)
59-
6055
### React Rally 2019
6156
August 22-23, 2019. Salt Lake City, USA.
6257

content/community/meetups.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ Do you have a local React.js meetup? Add it here! (Please keep the list alphabet
8888

8989
## Pakistan {#pakistan}
9090
* [Karachi](https://www.facebook.com/groups/902678696597634/)
91+
* [Lahore](https://www.facebook.com/groups/ReactjsLahore/)
9192

9293
## Peru {#peru}
9394
* [Lima](https://www.meetup.com/ReactJS-Peru/)
@@ -130,8 +131,8 @@ Do you have a local React.js meetup? Add it here! (Please keep the list alphabet
130131
* [New York, NY - ReactJS](https://www.meetup.com/NYC-Javascript-React-Group/)
131132
* [New York, NY - React Ladies](https://www.meetup.com/React-Ladies/)
132133
* [New York, NY - React Native](https://www.meetup.com/React-Native-NYC/)
133-
* [New York, NY - ReactNYC](https://www.meetup.com/ReactNYC/)
134134
* [Palo Alto, CA - React Native](https://www.meetup.com/React-Native-Silicon-Valley/)
135+
* [Philadelphia, PA - ReactJS](https://www.meetup.com/RQ-React/)
135136
* [Phoenix, AZ - ReactJS](https://www.meetup.com/ReactJS-Phoenix/)
136137
* [Pittsburgh, PA - ReactJS/React Native](https://www.meetup.com/ReactPgh/)
137138
* [Portland, OR - ReactJS](https://www.meetup.com/Portland-ReactJS/)

content/docs/conditional-rendering.md

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ ReactDOM.render(
4444

4545
[**Przetestuj kod na CodePen**](https://codepen.io/gaearon/pen/ZpVxNq?editors=0011)
4646

47-
Powitanie renderowane przez kod w powyższym przykładzie zależy od wartości właściwości `isLoggedIn`.
47+
Powitanie renderowane przez kod w powyższym przykładzie zależy od wartości właściwości `isLoggedIn`.
4848

4949
### Zmienne elementowe {#element-variables}
5050

@@ -74,7 +74,6 @@ W przykładzie poniżej zbudujemy [komponent ze stanem](/docs/state-and-lifecycl
7474

7575
W zależności od aktualnego stanu, będzie on renderował przycisk logowania (`<LoginButton />`) lub wylogowania `<LogoutButton />` . Będzie on również renderował komponent `<Greeting />` z poprzedniego przykładu:
7676

77-
7877
```javascript{20-25,29,30}
7978
class LoginControl extends React.Component {
8079
constructor(props) {
@@ -121,7 +120,6 @@ ReactDOM.render(
121120

122121
Deklarowanie zmiennej oraz stosowanie instrukcji `if` to dobry sposób na warunkowe renderowanie komponentu. Czasem jednak przydaje się nieco krótsza składnia. JSX umożliwia kilka różnych opcji warunków wewnątrzliniowych. Przedstawiamy je poniżej.
123122

124-
125123
### Wewnątrzliniowy warunek `if` z użyciem logicznego operatora `&&` {#inline-if-with-logical--operator}
126124

127125
JSX umożliwia stosowanie w nawiasach klamrowych [wszelkich wyrażeń](/docs/introducing-jsx.html#embedding-expressions-in-jsx), łącznie z javascriptowym operatorem logicznym `&&`. Jest to przydatne, gdy chcemy jakiś element dołączyć warunkowo.
@@ -187,16 +185,15 @@ render() {
187185
);
188186
}
189187
```
188+
190189
Czytelność takich wyrażeń jest oczywiście nieco mniejsza. Podobnie jak w JavaScripcie, wybór odpowiedniego stylu zależy od preferencji twoich i twojego zespołu. Jednocześnie należy pamiętać, że kiedy warunki stają się nazbyt złożone, dobrze jest rozważyć możliwość [wydzielenia osobnego komponentu](/docs/components-and-props.html#extracting-components)
191190

192191
### Zapobieganie renderowaniu komponentu {#preventing-component-from-rendering}
193192

194193
W sporadycznych przypadkach może zachodzić potrzeba ukrycia się komponentu, mimo iż został on już wyrenderowany przez inny komponent. Aby to umożliwić, należy zwrócić zamiast niego wartość `null`.
195194

196-
197195
W przykładzie poniżej, renderowanie baneru ostrzegawczego `<WarningBanner />` jest uzależnione od wartości właściwości o nazwie `warn` (pol. *ostrzeż*). Jeśli jest ona równa `false`, wówczas komponent ten nie jest renderowany.
198196

199-
200197
```javascript{2-4,29}
201198
function WarningBanner(props) {
202199
if (!props.warn) {

content/docs/forms.md

Lines changed: 31 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ redirect_from:
99
- "docs/forms-zh-CN.html"
1010
---
1111

12-
W Reakcie elementy formularza HTML działają trochę inaczej niż pozostałe elementy DOM. Wynika to stąd, że elementy formularza same utrzymują swój wewnętrzny stan. Dla przykładu przyjrzyjmy się zwykłemu formularzowi HTML przyjmującemu pojedyncze imię:
12+
W Reakcie elementy formularza HTML działają trochę inaczej niż pozostałe elementy DOM. Wynika to stąd, że elementy formularza same utrzymują swój wewnętrzny stan. Dla przykładu przyjrzyjmy się zwykłemu formularzowi HTML z jedną wartością - imieniem:
1313

1414
```html
1515
<form>
@@ -21,15 +21,15 @@ W Reakcie elementy formularza HTML działają trochę inaczej niż pozostałe el
2121
</form>
2222
```
2323

24-
Powyższy formularz posiada domyślną funkcję automatycznego przekierowania przeglądarki do nowej strony po wysłaniu formularza przez użytkownika. Jeśli zależy ci na tej funkcjonalności, to działa ona również w Reakcie. Jednak w większości przypadków dobrze jest mieć funkcję JavaScriptową, która obsługuje wysyłanie formularza i ma dostęp do podanych przez użytkownika danych. Standardem stała się obsługa formularzy poprzez tzw. "komponentny kontrolowane".
24+
Powyższy formularz posiada domyślną funkcję automatycznego przekierowania przeglądarki do nowej strony po wysłaniu formularza przez użytkownika. Jeśli zależy ci na tej funkcjonalności, to działa ona również w Reakcie. Jednak w większości przypadków dobrze jest mieć funkcję javascriptową, która obsługuje wysyłanie formularza i ma dostęp do podanych przez użytkownika danych. Standardem stała się obsługa formularzy poprzez tzw. "komponenty kontrolowane".
2525

2626
## Komponenty kontrolowane {#controlled-components}
2727

28-
W HTML-u, elementy formularza takie jak `<input>`, `<textarea>` i `<select>` najczęściej zachowują swój własny stan, który jest aktualizowany na podstawie danych wejściowych podawanych przez użytkownika. Natomiast w Reakcie zmienny stan komponentu jest zazwyczaj przechowywany we właściwości _state_ (pol. _stan_) danego komponentu. Jest on aktualizowany jedynie za pomocą funkcji [`setState()`](/docs/react-component.html#setstate).
28+
W HTML-u, elementy formularza takie jak `<input>`, `<textarea>` i `<select>` najczęściej zachowują swój własny stan, który jest aktualizowany na podstawie danych wejściowych podawanych przez użytkownika. Natomiast w Reakcie zmienny stan komponentu jest zazwyczaj przechowywany we właściwości `state` (pol. *stan*) danego komponentu. Jest on aktualizowany jedynie za pomocą funkcji [`setState()`](/docs/react-component.html#setstate).
2929

30-
Możliwe jest łączenie tych dwóch rozwiązań poprzez ustanowienie reactowego stanu jako "wyłącznego źródła prawdy". Wówczas reactowy komponent renderujący dany formularz kontroluje również to co zachodzi wewnątrz danego formularza podczas podawania danych wejściowych przez użytkownika. Element _input_ formularza kontrolowany w ten sposób przez Reacta nazywamy "komponentem kontrolowanym"
30+
Możliwe jest łączenie tych dwóch rozwiązań poprzez ustanowienie reactowego stanu jako "wyłącznego źródła prawdy". Wówczas reactowy komponent renderujący dany formularz kontroluje również to, co zachodzi wewnątrz niego podczas wypełniania pól przez użytkownika. Element `input` formularza, kontrolowany w ten sposób przez Reacta, nazywamy "komponentem kontrolowanym"
3131

32-
Gdybyśmy chcieli sprawić, aby podany wcześniej przykładowy formularz zapisywał przy wysłaniu podane przez użytkownika imię, możemy zrobić z niego komponent kontrolowany w następujący sposób:
32+
Gdybyśmy chcieli sprawić, aby podany wcześniej przykładowy formularz wyświetlał przy wysłaniu podane przez użytkownika imię, możemy zrobić z niego komponent kontrolowany w następujący sposób:
3333

3434
```javascript{4,10-12,24}
3535
class NameForm extends React.Component {
@@ -55,11 +55,7 @@ class NameForm extends React.Component {
5555
<form onSubmit={this.handleSubmit}>
5656
<label>
5757
Imię:
58-
<input
59-
type="text"
60-
value={this.state.value}
61-
onChange={this.handleChange}
62-
/>
58+
<input type="text" value={this.state.value} onChange={this.handleChange} />
6359
</label>
6460
<input type="submit" value="Wyślij" />
6561
</form>
@@ -70,17 +66,17 @@ class NameForm extends React.Component {
7066

7167
[**Przetestuj kod na CodePen**](https://codepen.io/gaearon/pen/VmmPgp?editors=0010)
7268

73-
Dzięki ustawieniu atrybutu `value` na elemencie formularza, wyświetlane dane zawsze będą odpowiadały `this.state.value`. Tym samym reactowy stan jest tutaj źródłem prawdy. Ponieważ zaś `handleChange` aktualizuje reactowy stan przy każdym wciśnięciu klawisza, wyświetlane dane aktualizują się na bieżąco w miarę wpisywania danych przez użytkownika.
69+
Dzięki ustawieniu atrybutu `value` na elemencie formularza, wyświetlane dane zawsze będą odpowiadały `this.state.value`. Tym samym reactowy stan jest tutaj źródłem prawdy. Ponieważ zaś `handleChange` aktualizuje reactowy stan przy każdym wciśnięciu klawisza, wyświetlane dane aktualizują się na bieżąco w miarę wpisywania ich przez użytkownika.
7470

75-
W komponentach kontrolowanych każda zmiana stanu wynika z działania powiązanej z nim funkcji obsługującej (ang. _handler function_). Ułatwia to modyfikowanie i walidację podawanych przez użytkownika danych wejściowych. Jeśli chcemy na przykład, aby imiona pisane były w całości wielkimi literami nasza funkcja `handleChange` mogłaby wyglądać następująco:
71+
W komponentach kontrolowanych każda zmiana stanu wynika z działania powiązanej z nim funkcji obsługującej (ang. *handler function*). Ułatwia to modyfikowanie i walidację podawanych przez użytkownika danych wejściowych. Jeśli chcemy na przykład, aby imiona pisane były w całości wielkimi literami, nasza funkcja `handleChange` mogłaby wyglądać następująco:
7672

7773
```javascript{2}
7874
handleChange(event) {
7975
this.setState({value: event.target.value.toUpperCase()});
8076
}
8177
```
8278

83-
## Znacznik _textarea_ {#the-textarea-tag}
79+
## Znacznik `textarea` {#the-textarea-tag}
8480

8581
W HTML-u element `<textarea>` definiuje swój tekst poprzez elementy potomne:
8682

@@ -90,7 +86,7 @@ W HTML-u element `<textarea>` definiuje swój tekst poprzez elementy potomne:
9086
</textarea>
9187
```
9288

93-
Natomiast w Reakcie `<textarea>` wykorzystuje w tym celu atrybut `value`. Dzięki temu kod formularza zawierającego `<textarea>` może być podobny do kodu formularza z jednoliniowym elementem _input_:
89+
Natomiast w Reakcie `<textarea>` wykorzystuje w tym celu atrybut `value`. Dzięki temu kod formularza zawierającego `<textarea>` może być podobny do kodu formularza z jednoliniowym elementem `input`:
9490

9591
```javascript{4-6,12-14,26}
9692
class EssayForm extends React.Component {
@@ -129,26 +125,26 @@ class EssayForm extends React.Component {
129125

130126
Zwróć uwagę, że wartość `this.state.value` jest inicjalizowana w konstruktorze, tak aby pole tekstowe zawierało jakiś domyślny tekst.
131127

132-
## Znacznik _select_ {#the-select-tag}
128+
## Znacznik `select` {#the-select-tag}
133129

134130
W HTML-u element `<select>` tworzy rozwijaną listę. Dla przykładu poniższy kod HTML tworzy rozwijaną listę smaków:
135131

136132
```html
137133
<select>
138-
<option value="grejpfrut">Grejpfrut</option>
139-
<option value="limonka">Limonka</option>
140-
<option selected value="orzechKoko">Orzech kokosowy</option>
134+
<option value="grejpfrutowy">Grejpfrutowy</option>
135+
<option value="limonkowy">Limonkowy</option>
136+
<option selected value="kokosowy">Kokosowy</option>
141137
<option value="mango">Mango</option>
142138
</select>
143139
```
144140

145-
Zwróć uwagę na atrybut `selected`, który sprawia, że domyślnie wybraną opcją jest opcja "Orzech kokosowy". W Reakcie zamiast atrybutu `selected` używamy atrybutu `value` na głównym znaczniku `select`. W przypadku komponentów kontrolowanych jest to rozwiązanie dogodniejsze, ponieważ wartość tego atrybutu aktualizowana jest tylko w jednym miejscu:
141+
Zwróć uwagę na atrybut `selected`, który sprawia, że opcją wybraną domyślnie jest opcja "Kokosowy". W Reakcie zamiast atrybutu `selected` używamy atrybutu `value` na głównym znaczniku `select`. W przypadku komponentów kontrolowanych jest to rozwiązanie bardziej dogodne, ponieważ wartość tego atrybutu aktualizowana jest tylko w jednym miejscu:
146142

147143
```javascript{4,10-12,24}
148144
class FlavorForm extends React.Component {
149145
constructor(props) {
150146
super(props);
151-
this.state = {value: "orzechKoko"};
147+
this.state = {value: "kokosowy"};
152148
153149
this.handleChange = this.handleChange.bind(this);
154150
this.handleSubmit = this.handleSubmit.bind(this);
@@ -169,9 +165,9 @@ class FlavorForm extends React.Component {
169165
<label>
170166
Wybierz swój ulubiony smak:
171167
<select value={this.state.value} onChange={this.handleChange}>
172-
<option value="grejpfrut">Grejpfrut</option>
173-
<option value="limonka">Limonka</option>
174-
<option value="orzechKoko">Orzech kokosowy</option>
168+
<option value="grejpfrutowy">Grejpfrutowy</option>
169+
<option value="limonkowy">Limonkowy</option>
170+
<option value="kokosowy">Kokosowy</option>
175171
<option value="mango">Mango</option>
176172
</select>
177173
</label>
@@ -188,15 +184,15 @@ Ogólnie elementy `<input type="text">`, `<textarea>`, i `<select>` działają p
188184

189185
> Wskazówka
190186
>
191-
> Wartością atrybutu `value` może być także tablica, daje to możliwość wyboru spośród wielu opcji w znaczniku `select`:
192-
187+
> Wartością atrybutu `value` może być także tablica. Daje to możliwość wyboru spośród wielu opcji w znaczniku `select`:
188+
>
193189
> ```js
194190
> <select multiple={true} value={['B', 'C']}>
195191
> ```
196192
197-
## Znacznik _file input_ {#the-file-input-tag}
193+
## Znacznik `input` dla plików {#the-file-input-tag}
198194
199-
W HTML-u element `<input type="file">` pozwala użytkownikom wybrać jeden lub więcej plików z pamięci swojego urządzenia, które następnie mogą być wysłane do serwera lub przetworzone z użyciem kodu JavaScript poprzez [File API](https://developer.mozilla.org/en-US/docs/Web/API/File/Using_files_from_web_applications).
195+
W HTML-u element `<input type="file">` pozwala użytkownikom wybrać jeden lub więcej plików z pamięci swojego urządzenia, które następnie mogą być wysłane do serwera lub przetworzone z użyciem kodu JavaScript poprzez [interfejs klasy `File`](https://developer.mozilla.org/en-US/docs/Web/API/File/Using_files_from_web_applications).
200196
201197
```html
202198
<input type="file" />
@@ -206,7 +202,7 @@ Ponieważ wartość tego elementu jest wartością przeznaczoną tylko do odczyt
206202

207203
## Obsługa wielu elementów `input` {#handling-multiple-inputs}
208204

209-
Kiedy zachodzi potrzeba obsługi wielu kontrolowanych elementów `input`, do każdego elementu można dodać atrybut `name` oraz pozwolić funkcji obsługującej (ang. _handler function_) zadecydować o dalszych krokach w zależności od wartości atrybutu `event.target.name`.
205+
Kiedy zachodzi potrzeba obsługi wielu kontrolowanych elementów `input`, do każdego elementu można dodać atrybut `name` oraz pozwolić funkcji obsługującej (ang. *handler function*) zadecydować o dalszych krokach w zależności od wartości atrybutu `event.target.name`.
210206

211207
Przyjrzyjmy się następującemu przykładowi:
212208

@@ -241,8 +237,7 @@ class Reservation extends React.Component {
241237
name="wybieraSie"
242238
type="checkbox"
243239
checked={this.state.wybieraSie}
244-
onChange={this.handleInputChange}
245-
/>
240+
onChange={this.handleInputChange} />
246241
</label>
247242
<br />
248243
<label>
@@ -251,8 +246,7 @@ class Reservation extends React.Component {
251246
name="liczbaGosci"
252247
type="number"
253248
value={this.state.liczbaGosci}
254-
onChange={this.handleInputChange}
255-
/>
249+
onChange={this.handleInputChange} />
256250
</label>
257251
</form>
258252
);
@@ -278,11 +272,11 @@ partialState[name] = value;
278272
this.setState(partialState);
279273
```
280274

281-
Ponadto ponieważ `setState()` automatycznie [włącza stan częściowy do stanu aktualnego](/docs/state-and-lifecycle.html#state-updates-are-merged), funkcja ta przywoływana jest tylko z nowo dostarczonymi danymi.
275+
Ponadto ponieważ `setState()` automatycznie [scala podany stan częściowy ze stanem aktualnym](/docs/state-and-lifecycle.html#state-updates-are-merged), funkcja ta wywoływana jest tylko z nowo dostarczonymi danymi.
282276

283-
## Wartość Null w kontrolowanym elemencie `input` " {#controlled-input-null-value}
277+
## Wartość `null` w kontrolowanym elemencie `input` " {#controlled-input-null-value}
284278

285-
Określenie wartości właściwości (ang. _prop_) [komponentu kontrolowanego](/docs/forms.html#controlled-components) zapobiega niepożądanym zmianom danych wejściowych przez użytkownika. Jeśli określiłeś `value`, a dane wejściowe w dalszym ciągu można edytować, sprawdź czy przez pomyłkę nie nadałeś atrybutowi `value` wartości `undefined` lub `null`.
279+
Określenie wartości właściwości (ang. *prop*) [komponentu kontrolowanego](/docs/forms.html#controlled-components) zapobiega niepożądanym zmianom danych wejściowych przez użytkownika. Jeśli określisz wartość dla `value`, a dane wejściowe w dalszym ciągu będzie można edytować, sprawdź, czy przez pomyłkę nie przekazujesz wartości `undefined` lub `null`.
286280

287281
Kod poniżej ilustruje ten problem. (Element `input` jest początkowo zablokowany, ale po krótkiej chwili jego zawartość można edytować.)
288282

@@ -296,8 +290,8 @@ setTimeout(function() {
296290

297291
## Inne rozwiązania {#alternatives-to-controlled-components}
298292

299-
Stosowanie kontrolowanych komponentów może być niekiedy uciążliwe, ponieważ wymaga nie tylko tworzenia funkcji obsługujących każdą możliwą zmianę twoich danych, lecz także przekazywania stanu elementu `input` poprzez komponent reactowy. To z kolei może się stać wyjątkowo irytującym doświadczeniem, zwłaszcza gdy konwertujesz istniejący już kod na kod reactowy lub kiedy integrujesz aplikację reactową z biblioteką nie-reactową. W tych sytuacjach warto abyś przyjrzał się [komponentom niekontrolowanym](/docs/uncontrolled-components.html), które stanowią aleternatywną technikę stosowania formularzy.
293+
Stosowanie kontrolowanych komponentów może być niekiedy uciążliwe, ponieważ wymaga nie tylko tworzenia funkcji obsługujących każdą możliwą zmianę twoich danych, lecz także przekazywania stanu elementu `input` poprzez komponent reactowy. To z kolei może się stać wyjątkowo irytującym doświadczeniem, zwłaszcza gdy konwertujesz istniejący już kod na kod reactowy lub kiedy integrujesz aplikację reactową z biblioteką nie-reactową. W tych sytuacjach warto abyś przyjrzał się [komponentom niekontrolowanym](/docs/uncontrolled-components.html), które stanowią alternatywną technikę stosowania formularzy.
300294

301295
## Rozwiązania całościowe {#fully-fledged-solutions}
302296

303-
Jeśli szukasz rozwiązania całościowego umożliwiającego walidację, śledzenie odwiedzonych pól oraz obsługę wysyłania danych, często wybieraną opcją jest [Formik](https://jaredpalmer.com/formik). Rozwiązanie to bazuje jednak na tych samych zasadach co komponenty kontrolowane i zarządzanie stanem. Dlatego ważne jest abyś przyswoił sobie te zasady.
297+
Jeśli szukasz rozwiązania kompleksowego umożliwiającego walidację, śledzenie odwiedzonych pól oraz obsługę wysyłania danych, często wybieraną opcją jest [biblioteka Formik](https://jaredpalmer.com/formik). Rozwiązanie to bazuje jednak na tych samych zasadach co komponenty kontrolowane i zarządzanie stanem. Dlatego bardzo ważne jest, abyś przyswoił sobie te zasady.

0 commit comments

Comments
 (0)