Skip to content

Commit 0b09854

Browse files
committed
контроллируемый -> управляемый
1 parent 34fbe7e commit 0b09854

File tree

7 files changed

+29
-29
lines changed

7 files changed

+29
-29
lines changed

TRANSLATION.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ React elements are [immutable](https://en.wikipedia.org/wiki/Immutable_object).
186186
| codemod | codemod-скрипт |
187187
| commit | фиксация |
188188
| context | контекст |
189-
| (un)controlled component | (не)контролируемый компонент |
189+
| (un)controlled component | (не)управляемый компонент |
190190
| cross-cutting concerns | cквозная функциональность |
191191
| custom | пользовательский (*напр., пользовательские хуки*) |
192192
| debugging | отладка |

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). Эта библиотека построена на принципах управляемых компонентов и управления состоянием, так что не пренебрегайте их изучением.

content/docs/integrating-with-other-libraries.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ function Example() {
6767
}
6868
```
6969

70-
Для простоты мы будем реализовывать [неконтролируемый компонент](/docs/uncontrolled-components.html).
70+
Для простоты мы будем реализовывать [неуправляемый компонент](/docs/uncontrolled-components.html).
7171

7272
Сначала создадим пустой компонент, с методом `render()`, который возвращает `<select>`, обёрнутый в `<div>`:
7373

@@ -108,7 +108,7 @@ componentWillUnmount() {
108108
<select className="Chosen-select" ref={el => this.el = el}>
109109
```
110110

111-
Этого достаточно, чтобы наш компонент отрендерился, но мы бы хотели получать уведомления об изменении значений. Для этого мы подпишемся на jQuery событие `change` на `<select>`, контролируемом Chosen.
111+
Этого достаточно, чтобы наш компонент отрендерился, но мы бы хотели получать уведомления об изменении значений. Для этого мы подпишемся на jQuery событие `change` на `<select>`, управляемом Chosen.
112112

113113
Мы не станем передавать в Chosen `this.props.onChange` напрямую, потому что пропсы компонента могут со временем измениться (в том числе и обработчики событий). Вместо этого мы объявим метод `handleChange()`, который будет вызывать `this.props.onChange`, и подпишем его на jQuery-событие `change`:
114114

content/docs/nav.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@
7070
- id: render-props
7171
title: Рендер-пропсы
7272
- id: static-type-checking
73-
title: Статическая типизация
73+
title: Статическая типизация
7474
- id: strict-mode
7575
title: Строгий режим
7676
- id: typechecking-with-proptypes

content/docs/reconciliation.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ React будет мутировать каждого потомка, вмест
139139

140140
В крайнем случае вы можете передать индекс элемента массива в качестве ключа. Это работает хорошо в случае, если элементы никогда не меняют порядок. Перестановки элементов вызывают замедление.
141141

142-
При использовании ключей перестановки так же могут вызывать проблемы с состоянием компонента. Экземпляры компонента обновляются и переиспользуются на основе их ключей. Перемещение элемента изменяет его, если ключ является индексом. В результате состояние компонента для таких вещей, как неконтролируемые `<input>`, может смешаться и обновиться неожиданным образом.
142+
При использовании ключей перестановки так же могут вызывать проблемы с состоянием компонента. Экземпляры компонента обновляются и переиспользуются на основе их ключей. Перемещение элемента изменяет его, если ключ является индексом. В результате состояние компонента для таких вещей, как неуправляемые `<input>`, может смешаться и обновиться неожиданным образом.
143143

144144
[Здесь](codepen://reconciliation/index-used-as-key) на CodePen есть примеры проблем, которые могут быть вызваны использованием индексов в качестве ключей, а [здесь](codepen://reconciliation/no-index-used-as-key) обновлённая версия того же примера, которая показывает как проблемы с перестановкой, сортировкой и вставкой элементов в начало решаются, если не использовать индексы как ключи.
145145

0 commit comments

Comments
 (0)