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
### 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*/}
1690
1690
1691
1691
<Wip>
1692
1692
1693
-
This section describes an **experimentalAPI that has not yet been released**in a stable version of React.
1693
+
Здесь описано **экспериментальноеAPI, которое ещё не опубликовано**в стабильном релизе React.
1694
1694
1695
1695
</Wip>
1696
1696
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
+
По умолчанию если в эффекте читается реактивное значение, то его нужно указать в зависимостях. Благодаря этому эффект будет "реагировать" на каждое изменение значения. И для большинства зависимостей как раз такое поведение вам и нужно.
1698
1698
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
+
**Но иногда вам может понадобиться читать в эффекте реактивное значение, но не "реагировать" на него.**Например, представьте себе, что нужно при каждом посещении страницы записывать в лог текущее количество товаров в корзине:
1700
1700
1701
1701
```js {3}
1702
1702
function Page({ url, shoppingCart }) {
1703
1703
useEffect(() => {
1704
1704
logVisit(url, shoppingCart.length);
1705
-
}, [url, shoppingCart]); // ✅ All dependencies declared
1705
+
}, [url, shoppingCart]); // ✅ Все зависимости указаны
1706
1706
// ...
1707
1707
}
1708
1708
```
1709
1709
1710
-
**What if you want to log a newpage 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`:
1711
1711
1712
1712
```js {2-4,7,8}
1713
1713
function Page({ url, shoppingCart }) {
@@ -1717,14 +1717,14 @@ function Page({ url, shoppingCart }) {
1717
1717
1718
1718
useEffect(() => {
1719
1719
onVisit(url);
1720
-
}, [url]); // ✅ All dependencies declared
1720
+
}, [url]); // ✅ Все зависимости указаны
1721
1721
// ...
1722
1722
}
1723
1723
```
1724
1724
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 ofthem. By reading`shoppingCart`inside of`onVisit`, you ensure that `shoppingCart`won't re-run your Effect.
1725
+
**Событие эффекта -- это не реактивное значение, и поэтому не должно указываться в зависимостях эффекта.**Благодаря этому в событие можно помещать нереактивный код (где можно читать последние значения пропсов и состояния). Поскольку чтение`shoppingCart`теперь происходит внутри `onVisit`, то изменение `shoppingCart`не будет перезапускать эффект.
1726
1726
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)
0 commit comments