Skip to content

Commit 60bd58d

Browse files
committed
Translated new edits in caveats
1 parent 4b84f87 commit 60bd58d

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

src/content/reference/react/useEffect.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,11 @@ function ChatRoom({ roomId }) {
6262
6363
* Если эффект зависит от объектов или функций, которые создаются в компоненте, есть риск, что **эффект будет запускаться слишком часто**. Такие лишние зависимости можно убрать, переместив создание [объекта](#removing-unnecessary-object-dependencies) или [функции](#removing-unnecessary-function-dependencies) внутрь эффекта. Кроме того, можно [убрать зависимость от состояния, если эффект просто его обновляет](#updating-state-based-on-previous-state-from-an-effect). А [не реактивную логику](#reading-the-latest-props-and-state-from-an-effect) можно вынести за пределы эффекта.
6464
65-
* Перед тем, как запустить эффект, React сначала **даст браузеру возможность отрисовать изменения на экране, а потом запустит ваш эффект.** Поэтому если ваш эффект после рендеринга делает ещё какие-то визуальные изменения (например, поправляет положение отрендеренной всплывающей подсказки), то эти изменения могут появиться с задержкой (подсказка на мгновение всплывёт в неправильном месте, и сразу переместится в правильное). Если эта задержка слишком заметна, попробуйте заменить `useEffect` на [`useLayoutEffect`.](/reference/react/useLayoutEffect)
65+
* Перед тем, как запустить эффект, React обычно сначала **даёт браузеру возможность отрисовать последние изменения на экране, а потом запускает ваш эффект.** Поэтому если ваш эффект после рендеринга делает ещё какие-то визуальные изменения (например, поправляет положение отрендеренной всплывающей подсказки), то эти изменения могут появиться с задержкой (подсказка на мгновение всплывёт в неправильном месте, и сразу переместится в правильное). Если эта задержка слишком заметна, попробуйте заменить `useEffect` на [`useLayoutEffect`.](/reference/react/useLayoutEffect)
6666
67-
* Аналогично, если ваш эффект меняет состояние в ответ на действия пользователя (например, должен сработать после клика), то нужно учитывать, что **сначала браузер обновит экран, а потом подействуют изменения состояния, которые делает эффект**. Обычно это ожидаемое поведение. Но если вам всё же важно обновить состояние до отрисовки браузером, то `useEffect` нужно заменить на [`useLayoutEffect`.](/reference/react/useLayoutEffect)
67+
* Если эффект запускается в ответ на действия пользователя (например, по клику), то React **может запустить эффект перед тем, как дать браузеру отрисовать экран.** Это нужно для того, чтобы событийной системе браузера стало известно о результатах работы эффекта. Обычно так и должно быть. Но если всё же нужно отложить какие-либо действия до момента, пока не отрисуется экран (например, показать `alert()`), то можно, например, использовать `setTimeout`. Детальнее можно почитать в [reactwg/react-18/128](https://github.com/reactwg/react-18/discussions/128).
68+
69+
* Если ваш эффект меняет состояние -- даже в ответ на действия пользователя (например, состояние должно измениться по клику), -- React **может всё же сначала дать браузеру обновить экран, и только потом учесть изменения состояния, которые сделал эффект**. Обычно это ожидаемое поведение. Но если вам всё же важно обновить состояние до отрисовки браузером, то `useEffect` стоит заменить на [`useLayoutEffect`.](/reference/react/useLayoutEffect)
6870
6971
* Эффекты **запускаются только на клиенте**. Они не запускаются во время серверного рендеринга.
7072
@@ -426,7 +428,7 @@ body {
426428
427429
#### Отслеживание видимости элемента {/*tracking-element-visibility*/}
428430
429-
В этом примере внешней системой также является браузерный DOM. Компонент `App` показывает сначала длинный список, потом компонент `Box`, и затем ещё один длинный список. Прокрутите этот список -- обратите внимание, что фон чернеет, когда компонент `Box` становится видимым. Компонент `Box` отслеживает свою видимость с помощью эффекта, который создаёт и управляет объектом [`IntersectionObserver`](https://developer.mozilla.org/ru/docs/Web/API/Intersection_Observer_API) -- браузерное API, оповещающее, когда элемент DOM появляется во вьюпорте.
431+
В этом примере внешней системой также является браузерный DOM. Компонент `App` показывает сначала длинный список, потом компонент `Box`, и затем ещё один длинный список. Прокрутите этот список -- обратите внимание, что фон чернеет, когда компонент `Box` становится целиком видимым. Компонент `Box` отслеживает свою видимость с помощью эффекта, который создаёт и управляет объектом [`IntersectionObserver`](https://developer.mozilla.org/ru/docs/Web/API/Intersection_Observer_API) -- браузерное API, оповещающее, когда элемент DOM появляется во вьюпорте.
430432
431433
<Sandpack>
432434

0 commit comments

Comments
 (0)