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/state-and-lifecycle.md
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,7 +10,7 @@ next: handling-events.html
10
10
11
11
На этой странице представлена концепция "состояния" (state) и "жизненного цикла" (lifecycle) компонентов React. Подробная [справочнике API компонента доступна по ссылке](/docs/react-component.html) .
12
12
13
-
В качестве примера рассмотрим бегущие часы из [предыдущего раздела](/docs/rendering-elements.html#updating-the-rendered-element). В разделе [Рендeринг элементов](/docs/rendering-elements.html#rendering-an-element-into-the-dom) мы изучили лишь один способ обновления UI - вызвать `ReactDOM.render()` для изменения результата рендера:
13
+
В качестве примера рассмотрим бегущие часы из [предыдущего раздела](/docs/rendering-elements.html#updating-the-rendered-element). В разделе [Рендeринг элементов](/docs/rendering-elements.html#rendering-an-element-into-the-dom) мы изучили лишь один способ обновления UI — вызвать `ReactDOM.render()` для изменения результата рендера:
14
14
15
15
```js{8-11}
16
16
function tick() {
@@ -107,7 +107,7 @@ class Clock extends React.Component {
107
107
`Clock` теперь определён как класс, а не функция.
108
108
109
109
110
-
Метод `render` будет вызываться каждый раз, когда происходит обновление. Так как мы рендерим `<Clock />` в один и тот же DOM-контейнер, мы используем единственный экземпляр класса `Clock`- поэтому мы можем задействовать внутреннее состояние и хуки жизненного цикла.
110
+
Метод `render` будет вызываться каждый раз, когда происходит обновление. Так как мы рендерим `<Clock />` в один и тот же DOM-контейнер, мы используем единственный экземпляр класса `Clock`— поэтому мы можем задействовать внутреннее состояние и хуки жизненного цикла.
111
111
112
112
## Добавление локального состояния в класс {#adding-local-state-to-a-class}
113
113
@@ -198,13 +198,13 @@ ReactDOM.render(
198
198
199
199
[**Посмотреть на CodePen**](http://codepen.io/gaearon/pen/KgQpJd?editors=0010)
200
200
201
-
Следущий этап - добавить в `Clock` создание собственного таймера с обновлением каждую секунду.
201
+
Следущий этап — добавить в `Clock` создание собственного таймера с обновлением каждую секунду.
202
202
203
203
## Добавление методов жизненного цикла в класс {#adding-lifecycle-methods-to-a-class}
204
204
205
205
В приложениях с множеством компонентов очень важно освобождать используемые системные ресурсы при удалении компонентов.
206
206
207
-
Мы называем "монтированием" (установкой) первоначальный рендеринг `Clock` в DOM. Наша цель -[создать таймер](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setInterval) всякий раз, когда это происходит.
207
+
Мы называем "монтированием" (установкой) первоначальный рендеринг `Clock` в DOM. Наша цель —[создать таймер](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setInterval) всякий раз, когда это происходит.
208
208
209
209
Каждый раз когда DOM-узел, созданный `Clock`, удаляется, просходит то, что мы называем "размонтирование". Учитывая важность сохранения ресурсов, мы [сбросим таймер](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/clearInterval) при каждой "размонтировке".
210
210
@@ -238,7 +238,7 @@ class Clock extends React.Component {
238
238
239
239
Эти методы называются "хуками (методами) жизненного цикла" (lifecycle methods).
240
240
241
-
Хук `componentDidMount()` запускается после того, как компонент отрендерился в DOM - это подходящее место для создания таймера:
241
+
Хук `componentDidMount()` запускается после того, как компонент отрендерился в DOM — это подходящее место для создания таймера:
242
242
243
243
```js{2-5}
244
244
componentDidMount() {
@@ -251,7 +251,7 @@ class Clock extends React.Component {
251
251
252
252
Обратите внимание, что мы сохраняем ID таймера в `this`.
253
253
254
-
В классовых компонентах `this.props` создается самим React, так же как и `this.state`- у этих полей особое назначение. Однако, если вам нужно сохранить информацию, которая не является частью процесса обработки данных React, можно вручную добавить дополнительные поля в класс (например, ID таймера).
254
+
В классовых компонентах `this.props` создается самим React, так же как и `this.state`— у этих полей особое назначение. Однако, если вам нужно сохранить информацию, которая не является частью процесса обработки данных React, можно вручную добавить дополнительные поля в класс (например, ID таймера).
255
255
256
256
Удалим таймер в хуке жизненного цикла `componentWillUnmount()`:
257
257
@@ -261,7 +261,7 @@ class Clock extends React.Component {
261
261
}
262
262
```
263
263
264
-
Наконец, реализуем метод `tick()`- он запускается таймером каждую секунду и использует `this.setState()`, который планирует обновление внутреннего состояния компонента:
264
+
Наконец, реализуем метод `tick()`— он запускается таймером каждую секунду и использует `this.setState()`, который планирует обновление внутреннего состояния компонента:
265
265
266
266
```js{18-22}
267
267
class Clock extends React.Component {
@@ -305,7 +305,7 @@ ReactDOM.render(
305
305
306
306
[**Посмотреть на CodePen**](http://codepen.io/gaearon/pen/amqdNA?editors=0010)
307
307
308
-
Результат - часы обновляются каждую секунду.
308
+
Результат — часы обновляются каждую секунду.
309
309
310
310
Давайте рассмотрим наше решение и разберем порядок, в котором вызываются методы:
311
311
@@ -315,7 +315,7 @@ ReactDOM.render(
315
315
316
316
3) Как только вывод рендера `Clock` вставлен в DOM, React вызывает хук жизненного цикла `componentDidMount()`. Внутри него компонент `Clock` указывает браузеру создать таймер, который будет вызывать метод компонента `tick()` раз в секунду.
317
317
318
-
4) Таймер вызывает метод `tick()` ежесекундно. Часть метода - вызов `setState()` с объектом, содержащим текущее время в качестве аргумента - таким образом компонент `Clock` планирует обновление UI. Благодаря вызову `setState()` React знает, что состояние изменилось, и снова вызывает метод `render()`, чтобы узнать, что должно отображаться на экране. На этот раз `this.state.date` в методе `render()` будет другим, и поэтому ренедер компонента будет включать обновлённое время и React соответственно обновит DOM.
318
+
4) Таймер вызывает метод `tick()` ежесекундно. Часть метода — вызов `setState()` с объектом, содержащим текущее время в качестве аргумента — таким образом компонент `Clock` планирует обновление UI. Благодаря вызову `setState()` React знает, что состояние изменилось, и снова вызывает метод `render()`, чтобы узнать, что должно отображаться на экране. На этот раз `this.state.date` в методе `render()` будет другим, и поэтому ренедер компонента будет включать обновлённое время и React соответственно обновит DOM.
319
319
320
320
5) Если компонент `Clock` когда-либо удаляется из DOM, React вызывает хук жизненного цикла `componentWillUnmount()`, таким образом таймер будет остановлен и удален.
Слияние состояния - поверхностное, поэтому вызов `this.setState({comments})` оставляет `this.state.posts` нетронутым, но полностью заменяет `this.state.comments`.
413
+
Слияние состояния — поверхностное, поэтому вызов `this.setState({comments})` оставляет `this.state.posts` нетронутым, но полностью заменяет `this.state.comments`.
414
414
415
415
## Однонаправленный поток данных {#the-data-flows-down}
416
416
417
-
В иерархии компонентов, ни родительский, ни дочерние компоненты не знают задано (stateful) или нет (stateless) состояние определенного компонента. Так же им не важно, как был создан определенный компонент - с помощью функцим или класса. В связи с этим, состояние часто называют "локальным", "внутренним" или инкапсулированным. Оно недоступно для любого другого компонента, за исключением того, который им владеет и устанавливает его.
417
+
В иерархии компонентов, ни родительский, ни дочерние компоненты не знают задано (stateful) или нет (stateless) состояние определенного компонента. Так же им не важно, как был создан определенный компонент — с помощью функцим или класса. В связи с этим, состояние часто называют "локальным", "внутренним" или инкапсулированным. Оно недоступно для любого другого компонента, за исключением того, который им владеет и устанавливает его.
418
418
419
419
Компонент может передать своё состояние вниз по дереву компонентов в виде пропс для его дочерних компонентов:
0 commit comments