Skip to content

Commit 6548637

Browse files
committed
Translated useEffectEvent in usage of useEffect
1 parent 2958bcc commit 6548637

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

src/content/reference/react/useEffect.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1686,28 +1686,28 @@ button { margin-left: 10px; }
16861686

16871687
---
16881688

1689-
### Reading the latest props and state from an Effect {/*reading-the-latest-props-and-state-from-an-effect*/}
1689+
### Чтение в эффекте актуальных пропсов и состояния {/*reading-the-latest-props-and-state-from-an-effect*/}
16901690

16911691
<Wip>
16921692

1693-
This section describes an **experimental API that has not yet been released** in a stable version of React.
1693+
Здесь описано **экспериментальное API, которое ещё не опубликовано** в стабильном релизе React.
16941694

16951695
</Wip>
16961696

1697-
By default, when you read a reactive value from an Effect, you have to add it as a dependency. This ensures that your Effect "reacts" to every change of that value. For most dependencies, that's the behavior you want.
1697+
По умолчанию если в эффекте читается реактивное значение, то его нужно указать в зависимостях. Благодаря этому эффект будет "реагировать" на каждое изменение значения. И для большинства зависимостей как раз такое поведение вам и нужно.
16981698

1699-
**However, sometimes you'll want to read the *latest* props and state from an Effect without "reacting" to them.** For example, imagine you want to log the number of the items in the shopping cart for every page visit:
1699+
**Но иногда вам может понадобиться читать в эффекте реактивное значение, но не "реагировать" на него.** Например, представьте себе, что нужно при каждом посещении страницы записывать в лог текущее количество товаров в корзине:
17001700

17011701
```js {3}
17021702
function Page({ url, shoppingCart }) {
17031703
useEffect(() => {
17041704
logVisit(url, shoppingCart.length);
1705-
}, [url, shoppingCart]); // ✅ All dependencies declared
1705+
}, [url, shoppingCart]); // ✅ Все зависимости указаны
17061706
// ...
17071707
}
17081708
```
17091709

1710-
**What if you want to log a new page visit after every `url` change, but *not* if only the `shoppingCart` changes?** You can't exclude `shoppingCart` from dependencies without breaking the [reactivity rules.](#specifying-reactive-dependencies) However, you can express that you *don't want* a piece of code to "react" to changes even though it is called from inside an Effect. [Declare an *Effect Event*](/learn/separating-events-from-effects#declaring-an-effect-event) with the [`useEffectEvent`](/reference/react/experimental_useEffectEvent) Hook, and move the code reading `shoppingCart` inside of it:
1710+
**Что если запись в лог нужно делать только при изменении `url`, а при изменении `shoppingCart` -- не нужно?** Убрать `shoppingCart` из зависимостей так, чтобы не сломать [правила реактивности,](#specifying-reactive-dependencies) нельзя. Зато можно для некоторого куска кода обозначить, что он не должен "реагировать" на изменения, даже когда вызывается в эффекте. Для этого вы можете с помощью хука [`useEffectEvent`](/reference/react/experimental_useEffectEvent) объявить [*Событие эффекта*](/learn/separating-events-from-effects#declaring-an-effect-event), и поместить в него код, читающий `shoppingCart`:
17111711

17121712
```js {2-4,7,8}
17131713
function Page({ url, shoppingCart }) {
@@ -1717,14 +1717,14 @@ function Page({ url, shoppingCart }) {
17171717
17181718
useEffect(() => {
17191719
onVisit(url);
1720-
}, [url]); // ✅ All dependencies declared
1720+
}, [url]); // ✅ Все зависимости указаны
17211721
// ...
17221722
}
17231723
```
17241724

1725-
**Effect Events are not reactive and must always be omitted from dependencies of your Effect.** This is what lets you put non-reactive code (where you can read the latest value of some props and state) inside of them. By reading `shoppingCart` inside of `onVisit`, you ensure that `shoppingCart` won't re-run your Effect.
1725+
**Событие эффекта -- это не реактивное значение, и поэтому не должно указываться в зависимостях эффекта.** Благодаря этому в событие можно помещать нереактивный код (где можно читать последние значения пропсов и состояния). Поскольку чтение `shoppingCart` теперь происходит внутри `onVisit`, то изменение `shoppingCart` не будет перезапускать эффект.
17261726

1727-
[Read more about how Effect Events let you separate reactive and non-reactive code.](/learn/separating-events-from-effects#reading-latest-props-and-state-with-effect-events)
1727+
[Подробнее о том, как события эффектов позволяют отделить нереактивный код от реактивного.](/learn/separating-events-from-effects#reading-latest-props-and-state-with-effect-events)
17281728

17291729

17301730
---

0 commit comments

Comments
 (0)