Skip to content

Commit 0a4d8aa

Browse files
Anton Serousanother-guy
authored andcommitted
Translate "Forms": управляемый -> контролируемый
1 parent 6d0c2cf commit 0a4d8aa

File tree

1 file changed

+14
-14
lines changed

1 file changed

+14
-14
lines changed

content/docs/forms.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@ redirect_from:
2121
</form>
2222
```
2323

24-
По умолчанию браузер переходит на другую страницу при отправке HTML-форм, в том числе и этой. Если вас это устраивает, то не надо ничего менять, в React формы работают как обычно. Однако, чаще всего форму удобнее обрабатывать с помощью JavaScript функции, у которой есть доступ к введённым данным. Стандартный способ реализации такого поведения называется «управляемые компоненты».
24+
По умолчанию браузер переходит на другую страницу при отправке HTML-форм, в том числе и этой. Если вас это устраивает, то не надо ничего менять, в React формы работают как обычно. Однако, чаще всего форму удобнее обрабатывать с помощью JavaScript функции, у которой есть доступ к введённым данным. Стандартный способ реализации такого поведения называется «контролируемые компоненты».
2525

26-
## Управляемые компоненты {#controlled-components}
26+
## Контролируемые компоненты {#controlled-components}
2727

2828
В HTML элементы формы, такие как `<input>`, `<textarea>` и `<select>` обычно сами управляют своим состоянием и обновляют его когда пользователь вводит данные. В React мутабельное состояние обычно содержится в свойстве компонентов `state` и обновляется только через вызов[`setState()`](/docs/react-component.html#setstate)
2929

30-
Мы можем скомбинировать оба подхода и сделать состояние React-компонента "единственным источником правды". Тогда React-компонент будет рендерить форму и управлять её поведением в ответ на пользовательский ввод. Значением элемента формы input в этом случае будет управлять React, а сам элемент будет называться «управляемый компонент».
30+
Мы можем скомбинировать оба подхода и сделать состояние React-компонента "единственным источником правды". Тогда React-компонент будет рендерить форму и контролировать её поведение в ответ на пользовательский ввод. Значение элемента формы input в этом случае будет контролировать React, а сам элемент будет называться «контролируемый компонент».
3131

32-
Допустим, мы хотим, чтобы предыдущий пример выводил в консоль имя, когда мы отправляем форму. Тогда можно написать форму в виде управляемого компонента:
32+
Допустим, мы хотим, чтобы предыдущий пример выводил в консоль имя, когда мы отправляем форму. Тогда можно написать форму в виде контролируемого компонента:
3333

3434
```javascript{4,10-12,24}
3535
class NameForm extends React.Component {
@@ -68,7 +68,7 @@ class NameForm extends React.Component {
6868

6969
Мы установили атрибут `value` для поля ввода, и теперь в нём всегда будет отображаться `this.state.value`. Состояние React-компонента стало «источником истины». А, так как каждое нажатие клавиши вызывает `handleChange`, который обновляет состояние React-компонента, значение в поле будет обновляться по мере того как пользователь печатает.
7070

71-
В управляемом компоненте с каждой мутацией состояния связана функция-обработчик. Благодаря этому валидация или изменение введённого значения становится простой задачей. Например, если мы хотим, чтобы имя обязательно было набрано заглавными буквами, можно написать такой `handleChange`:
71+
В контролируемом компоненте с каждой мутацией состояния связана функция-обработчик. Благодаря этому валидация или изменение введённого значения становится простой задачей. Например, если мы хотим, чтобы имя обязательно было набрано заглавными буквами, можно написать такой `handleChange`:
7272

7373
```javascript{2}
7474
handleChange(event) {
@@ -138,7 +138,7 @@ class EssayForm extends React.Component {
138138
</select>
139139
```
140140

141-
Пункт списка "Кокос" выбран по умолчанию из-за установленного атрибута `selected`. React вместо этого атрибута использует `value` в корневом теге `select`. В управляемом компоненте так удобнее, потому что обновлять значение нужно только в одном месте (`state`). Пример:
141+
Пункт списка "Кокос" выбран по умолчанию из-за установленного атрибута `selected`. React вместо этого атрибута использует `value` в корневом теге `select`. В контролируемом компоненте так удобнее, потому что обновлять значение нужно только в одном месте (`state`). Пример:
142142

143143
```javascript{4,10-12,24}
144144
class FlavorForm extends React.Component {
@@ -180,7 +180,7 @@ class FlavorForm extends React.Component {
180180

181181
[**Посмотреть на CodePen**](https://codepen.io/gaearon/pen/JbbEzX?editors=0010)
182182

183-
Подводя итог, `<input type="text">`, `<textarea>`, и `<select>` работают очень похоже. Все они принимают атрибут `value`, который можно использовать, чтобы реализовать управляемый компонент.
183+
Подводя итог, `<input type="text">`, `<textarea>`, и `<select>` работают очень похоже. Все они принимают атрибут `value`, который можно использовать, чтобы реализовать контролируемый компонент.
184184

185185
> Примечание
186186
>
@@ -198,11 +198,11 @@ class FlavorForm extends React.Component {
198198
<input type="file" />
199199
```
200200
201-
Так как значение такого элемента доступно только для чтения, это **неуправляемый** React-компонент. Мы расскажем про этот и другие неуправляемые компоненты [далее в документации](/docs/uncontrolled-components.html#the-file-input-tag).
201+
Так как значение такого элемента доступно только для чтения, это **неконтролируемый** React-компонент. Мы расскажем про этот и другие неконтролируемые компоненты [далее в документации](/docs/uncontrolled-components.html#the-file-input-tag).
202202

203203
## Обработка нескольких input {#handling-multiple-inputs}
204204

205-
Если вам нужны несколько управляемых элементов `input`, вы можете назначить каждому из них атрибут `name`, что позволит функции-обработчику решать, что делать, основываясь на значении `event.target.name`.
205+
Если вам нужны несколько контролируемых элементов `input`, вы можете назначить каждому из них атрибут `name`, что позволит функции-обработчику решать, что делать, основываясь на значении `event.target.name`.
206206

207207
Пример:
208208

@@ -274,9 +274,9 @@ this.setState(partialState);
274274

275275
Кроме того, `setState()` автоматически производит [слияние части состояния с текущим состоянием](/docs/state-and-lifecycle.html#state-updates-are-merged), то есть нам нужно передать в него только ту часть `state`, которую хотим изменить.
276276

277-
## Значение null управляемого компонента {#controlled-input-null-value}
277+
## Значение null контролируемого компонента {#controlled-input-null-value}
278278

279-
Если установить [управляемому компоненту](/docs/forms.html#controlled-components) проп `value`, то пользователь не сможет изменить его значение без вашего желания. Если вы установили `value`, а поле ввода по-прежнему можно редактировать, то, возможно, вы случайно задали `value`, равный `undefined` или `null`.
279+
Если установить [контролируемому компоненту](/docs/forms.html#controlled-components) проп `value`, то пользователь не сможет изменить его значение без вашего желания. Если вы установили `value`, а поле ввода по-прежнему можно редактировать, то, возможно, вы случайно задали `value`, равный `undefined` или `null`.
280280

281281
Код ниже это демонстрирует. (Изначально заблокированный `input` становится редактируемым после небольшой задержки.)
282282

@@ -289,10 +289,10 @@ setTimeout(function() {
289289

290290
```
291291

292-
## Альтернативы управляемым компонентам {#alternatives-to-controlled-components}
292+
## Альтернативы контролируемым компонентам {#alternatives-to-controlled-components}
293293

294-
Использование управляемых компонентов иногда может быть утомительным. Приходится писать обработчик события для каждого варианта изменения ваших данных и проводить всё состояние формы через компонент React. Это может особенно раздражать, если вы переносите существующую кодовую базу в React, или когда работаете над интеграцией React-приложения с другой библиотекой. В такой ситуации могут пригодиться [неуправляемые компоненты](/docs/uncontrolled-components.html), альтернативная техника реализации ввода данных в форму.
294+
Использование контролируемых компонентов иногда может быть утомительным. Приходится писать обработчик события для каждого варианта изменения ваших данных и проводить всё состояние формы через компонент React. Это может особенно раздражать, если вы переносите существующую кодовую базу в React, или когда работаете над интеграцией React-приложения с другой библиотекой. В такой ситуации могут пригодиться [неконтролируемые компоненты](/docs/uncontrolled-components.html), альтернативная техника реализации ввода данных в форму.
295295

296296
## Полноценные решения {#fully-fledged-solutions}
297297

298-
Ели вы ищите полноценное решение, которое может валидировать ввод, запомнить посещённые поля формы и обработать ее отправку, присмотритесь к [Formik](https://jaredpalmer.com/formik). Как бы то ни было, эта библиотека построена на принципах управляемых компонентов и управления состоянием, так что не пренебрегайте их изучением.
298+
Ели вы ищите полноценное решение, которое может валидировать ввод, запомнить посещённые поля формы и обработать ее отправку, присмотритесь к [Formik](https://jaredpalmer.com/formik). Как бы то ни было, эта библиотека построена на принципах контролируемых компонентов и управления состоянием, так что не пренебрегайте их изучением.

0 commit comments

Comments
 (0)