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
[**Посмотреть на CodePen**](http://codepen.io/gaearon/pen/gwoJZk?editors=0010)
33
33
34
-
В этой главе мы узнаем, как инкаспулировать и обеспечить многократное использование компонента `Clock`. Компонент самостоятельно создаст свой собственный таймер и будет самообновляться раз в секунду.
34
+
В этой главе мы узнаем, как инкапсулировать и обеспечить многократное использование компонента `Clock`. Компонент самостоятельно создаст свой собственный таймер и будет самообновляться раз в секунду.
35
35
36
36
Для начала, извлечём компонент, показывающий время:
@@ -237,7 +237,7 @@ class Clock extends React.Component {
237
237
238
238
Эти методы называются «методами жизненного цикла» (lifecycle methods).
239
239
240
-
Метод `componentDidMount()` запускается после того, как компонент отрендерился в DOM — здесь мы и созданим таймер:
240
+
Метод `componentDidMount()` запускается после того, как компонент отрендерился в DOM — здесь мы и создадим таймер:
241
241
242
242
```js{2-5}
243
243
componentDidMount() {
@@ -250,7 +250,7 @@ class Clock extends React.Component {
250
250
251
251
Обратите внимание, что мы сохраняем ID таймера в `this`.
252
252
253
-
В классовых компонентах React сам создает`this.props`, у этого поля так же как и у `this.state` особое назначение. Однако, если вам нужно сохранить информацию, которая не является частью процесса обработки данных React, можете вручную добавить дополнительные поля в класс (например, ID таймера).
253
+
В классовых компонентах React сам создает`this.props`, у этого поля так же как и у `this.state` особое назначение. Однако, если вам нужно сохранить информацию, которая не является частью процесса обработки данных React, можете вручную добавить дополнительные поля в класс (например, ID таймера).
254
254
255
255
Удалим таймер в методе жизненного цикла `componentWillUnmount()`:
256
256
@@ -289,8 +289,8 @@ class Clock extends React.Component {
289
289
render() {
290
290
return (
291
291
<div>
292
-
<h1>Hello, world!</h1>
293
-
<h2>It is {this.state.date.toLocaleTimeString()}.</h2>
3) Как только вывод рендера `Clock` вставлен в DOM, React вызывает метод жизненного цикла `componentDidMount()`. Внутри него компонент `Clock` указывает браузеру создать таймер, который будет вызывать `tick()` раз в секунду.
316
316
317
-
4) Таймер вызывает метод `tick()` ежесекундно. Часть метода — вызов `setState()` с объектом текущего времени — таким образом компонент `Clock` планирует обновление UI. Благодаря вызову `setState()` React знает, что состояние изменилось, и снова вызывает метод `render()`, чтобы узнать, что должно отображаться на экране. На этот раз `this.state.date` в методе `render()` будет другим, ренедер компонента будет включать обновлённое время и React обновит DOM соответственно.
317
+
4) Таймер вызывает метод `tick()` ежесекундно. Часть метода — вызов `setState()` с объектом текущего времени — таким образом компонент `Clock` планирует обновление UI. Благодаря вызову `setState()` React знает, что состояние изменилось, и снова вызывает метод `render()`, чтобы узнать, что должно отображаться на экране. На этот раз `this.state.date` в методе `render()` будет другим, рендер компонента будет включать обновлённое время и React обновит DOM соответственно.
318
318
319
319
5) Если компонент `Clock` когда-либо удаляется из DOM, React вызывает метод жизненного цикла `componentWillUnmount()`, таким образом таймер будет остановлен и удален.
320
320
321
-
## Правильное использование состояния {#using-state-correctly}
321
+
## Как правильно использовать состояние {#using-state-correctly}
322
322
323
323
Важно знать три детали о правильно применении `setState()`.
## Однонаправленный поток данных {#the-data-flows-down}
415
415
416
-
В иерархии компонентов, ни родительский, ни дочерние компоненты не знают с состоянием (stateful) другие компоненты или без состояния (stateless). Так же не важно, как был создан определенный компонент — с помощью функции или класса. Поэтому, состояние часто называют «локальным», «внутренним» или инкапсулированным. Оно доступно только для самого компонента и скрыто от других.
416
+
В иерархии компонентов, ни родительский, ни дочерние компоненты не знают с состоянием (stateful) другие компоненты или без состояния (stateless). Также не важно, как был создан определенный компонент — с помощью функции или класса. Поэтому, состояние часто называют «локальным», «внутренним» или инкапсулированным. Оно доступно только для самого компонента и скрыто от других.
417
417
418
418
Компонент может передать своё состояние вниз по дереву в виде пропсов дочерних компонентов:
419
419
420
420
```js
421
-
<h2>It is {this.state.date.toLocaleTimeString()}.</h2>
0 commit comments