Skip to content

Commit 41380cf

Browse files
Adding Jakub's corrections
1 parent 1dd5374 commit 41380cf

File tree

1 file changed

+28
-28
lines changed

1 file changed

+28
-28
lines changed

content/docs/forms.md

Lines changed: 28 additions & 28 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 {
@@ -70,17 +70,17 @@ class NameForm extends React.Component {
7070

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

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.
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 ich przez użytkownika.
7474

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:
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:
7676

7777
```javascript{2}
7878
handleChange(event) {
7979
this.setState({value: event.target.value.toUpperCase()});
8080
}
8181
```
8282

83-
## Znacznik _textarea_ {#the-textarea-tag}
83+
## Znacznik *textarea* {#the-textarea-tag}
8484

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

@@ -90,7 +90,7 @@ W HTML-u element `<textarea>` definiuje swój tekst poprzez elementy potomne:
9090
</textarea>
9191
```
9292

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_:
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`:
9494

9595
```javascript{4-6,12-14,26}
9696
class EssayForm extends React.Component {
@@ -129,26 +129,26 @@ class EssayForm extends React.Component {
129129

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

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

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

136136
```html
137137
<select>
138-
<option value="grejpfrut">Grejpfrut</option>
139-
<option value="limonka">Limonka</option>
140-
<option selected value="orzechKoko">Orzech kokosowy</option>
138+
<option value="grejpfrutowy">Grejpfrutowy</option>
139+
<option value="limonkowy">Limonkowy</option>
140+
<option selected value="kokosowy">Kokosowy</option>
141141
<option value="mango">Mango</option>
142142
</select>
143143
```
144144

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:
145+
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:
146146

147147
```javascript{4,10-12,24}
148148
class FlavorForm extends React.Component {
149149
constructor(props) {
150150
super(props);
151-
this.state = {value: "orzechKoko"};
151+
this.state = {value: "kokosowy"};
152152
153153
this.handleChange = this.handleChange.bind(this);
154154
this.handleSubmit = this.handleSubmit.bind(this);
@@ -169,9 +169,9 @@ class FlavorForm extends React.Component {
169169
<label>
170170
Wybierz swój ulubiony smak:
171171
<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>
172+
<option value="grejpfrutowy">Grejpfrutowy</option>
173+
<option value="limonkowy">Limonkowy</option>
174+
<option value="kokosowy">Kokosowy</option>
175175
<option value="mango">Mango</option>
176176
</select>
177177
</label>
@@ -188,15 +188,15 @@ Ogólnie elementy `<input type="text">`, `<textarea>`, i `<select>` działają p
188188

189189
> Wskazówka
190190
>
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-
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+
>
193193
> ```js
194194
> <select multiple={true} value={['B', 'C']}>
195195
> ```
196196
197-
## Znacznik _file input_ {#the-file-input-tag}
197+
## Znacznik `input` dla plików {#the-file-input-tag}
198198
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).
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 [interfejs klasy `File`](https://developer.mozilla.org/en-US/docs/Web/API/File/Using_files_from_web_applications).
200200
201201
```html
202202
<input type="file" />
@@ -206,7 +206,7 @@ Ponieważ wartość tego elementu jest wartością przeznaczoną tylko do odczyt
206206

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

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`.
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`.
210210

211211
Przyjrzyjmy się następującemu przykładowi:
212212

@@ -278,11 +278,11 @@ partialState[name] = value;
278278
this.setState(partialState);
279279
```
280280

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.
281+
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.
282282

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

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`.
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ś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`.
286286

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

@@ -296,8 +296,8 @@ setTimeout(function() {
296296

297297
## Inne rozwiązania {#alternatives-to-controlled-components}
298298

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.
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ą alternatywną technikę stosowania formularzy.
300300

301301
## Rozwiązania całościowe {#fully-fledged-solutions}
302302

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.
303+
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)