Skip to content

Commit 833ef37

Browse files
author
khikmatjon
committed
final fixes
1 parent 63c86aa commit 833ef37

File tree

1 file changed

+14
-14
lines changed

1 file changed

+14
-14
lines changed

src/content/reference/react/useCallback.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const cachedFn = useCallback(fn, dependencies)
2020

2121
### `useCallback(fn, dependencies)` {/*usecallback*/}
2222

23-
Вызовите `useCallback` на верхнем уровне вашего компонента, чтобы кешировать определение функции между рендерами:
23+
Вызовите `useCallback` на верхнем уровне вашего компонента, чтобы кешировать функцию между повторными рендерами:
2424

2525
```js {4,9}
2626
import { useCallback } from 'react';
@@ -38,7 +38,7 @@ export default function ProductPage({ productId, referrer, theme }) {
3838
3939
#### Параметры {/*parameters*/}
4040
41-
* `fn`: Значение функции, которую вы хотите кешировать, может принимать любые аргументы и возвращать любые значения. React вернет (но не вызовет!) вашу функцию при первом рендере. При последующих рендерах React даст вам ту же функцию, если `dependencies` не изменились. В противном случае он вернет функцию, переданную при текущем рендере, и сохранит её для возможного повторного использования. React не вызывает вашу функцию, он возвращает её вам, чтобы вы могли решить, когда и нужно ли её вызывать.
41+
* `fn`: Значение функции, которую вы хотите кешировать. Она может принимать любые аргументы и возвращать любые значения. React вернет (но не вызовет!) вашу функцию при первом рендере. При последующих рендерах React даст вам ту же функцию, если `dependencies` не изменились. В противном случае он вернет функцию, переданную при текущем рендере, и сохранит её для возможного повторного использования. React не вызывает вашу функцию. Он возвращает её вам, чтобы вы могли решить, когда и нужно ли её вызывать.
4242
4343
* `dependencies`: Список всех реактивных значений, на которые ссылается код `fn`. К реактивным значениям относятся пропсы, состояние и все переменные и функции, объявленные непосредственно в теле компонента. Если ваш линтер [настроен для использования с React](/learn/editor-setup#linting), он проверит, что каждое реактивное значение правильно указано как зависимость. Список зависимостей должен иметь постоянное количество элементов и быть записан примерно так: `[dep1, dep2, dep3]`. React будет сравнивать каждую зависимость с её предыдущим значением, используя алгоритм сравнения [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is).
4444
@@ -78,14 +78,14 @@ function ProductPage({ productId, referrer, theme }) {
7878
7979
Вам нужно передать две вещи в `useCallback`:
8080
81-
1. Функцию, которую вы хотите кешировать между рендерами.
81+
1. Функцию, которую вы хотите кешировать между повторными рендерами.
8282
2. <CodeStep step={2}>Список зависимостей</CodeStep>, включающий каждое значение внутри вашего компонента, которое используется внутри функции.
8383
8484
При первом рендере <CodeStep step={3}>возвращаемая функция</CodeStep> из `useCallback` будет той функцией, которую вы передали.
8585
8686
При последующих рендерах React сравнит <CodeStep step={2}>зависимости</CodeStep> с теми, которые вы передали при предыдущем рендере. Если ни одна из зависимостей не изменилась (сравнение производится с помощью [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is)), `useCallback` вернёт ту же функцию, что и раньше. В противном случае, `useCallback` вернёт функцию, переданную при *текущем* рендере.
8787
88-
Другими словами, `useCallback` кеширует функцию между рендерами до тех пор, пока её зависимости не изменятся.
88+
Другими словами, `useCallback` кеширует функцию между повторными рендерами до тех пор, пока её зависимости не изменятся.
8989
9090
**Давайте рассмотрим пример, чтобы понять, когда это полезно.**
9191
@@ -103,7 +103,7 @@ function ProductPage({ productId, referrer, theme }) {
103103
104104
Вы заметили, что при переключении пропса `theme` приложение на мгновение зависает, но если убрать `<ShippingForm />` из вашего JSX, оно работает быстро. Это говорит о том, что стоит попытаться оптимизировать компонент `ShippingForm`.
105105
106-
**По умолчанию, когда компонент повторно рендерится, React рекурсивно рендерит всех его дочерних компонентов.** Поэтому, когда `ProductPage` рендерится с другой `theme`, компонент `ShippingForm` *тоже* повторно рендерится. Это нормально для компонентов, которые не требуют больших вычислений при рендере. Но если повторный рендер медленный, можно сказать `ShippingForm` пропустить рендеринг, если его пропсы такие же, как при последнем рендере, обернув его в [`memo`:](/reference/react/memo)
106+
**По умолчанию, когда компонент повторно рендерится, React рекурсивно отрендерит снова все его дочерние компоненты.** Поэтому, когда `ProductPage` рендерится с другой `theme`, компонент `ShippingForm` *тоже* повторно рендерится. Это нормально для компонентов, которые не требуют больших вычислений при рендере. Но если повторный рендер медленный, можно сказать `ShippingForm` пропустить повторный рендеринг, если его пропсы такие же, как при последнем рендере, обернув его в [`memo`:](/reference/react/memo)
107107
108108
```js {3,5}
109109
import { memo } from 'react';
@@ -127,7 +127,7 @@ function ProductPage({ productId, referrer, theme }) {
127127

128128
return (
129129
<div className={theme}>
130-
{/* ... таким образом, пропсы ShippingForm никогда не будут одинаковыми, и он будет рендериться каждый раз. */}
130+
{/* ... таким образом, пропсы ShippingForm никогда не будут одинаковыми, и он будет повторно рендериться каждый раз. */}
131131
<ShippingForm onSubmit={handleSubmit} />
132132
</div>
133133
);
@@ -138,13 +138,13 @@ function ProductPage({ productId, referrer, theme }) {
138138
139139
```js {2,3,8,12-13}
140140
function ProductPage({ productId, referrer, theme }) {
141-
// Сообщите React, чтобы кешировать вашу функцию между рендерами...
141+
// Сообщите React, чтобы кешировать вашу функцию между повторными рендерами...
142142
const handleSubmit = useCallback((orderDetails) => {
143143
post('/product/' + productId + '/buy', {
144144
referrer,
145145
orderDetails,
146146
});
147-
}, [productId, referrer]); // // ...поэтому, пока эти зависимости не изменятся...
147+
}, [productId, referrer]); // // ...пока эти зависимости не изменятся...
148148

149149
return (
150150
<div className={theme}>
@@ -155,7 +155,7 @@ function ProductPage({ productId, referrer, theme }) {
155155
}
156156
```
157157
158-
**Оборачивая `handleSubmit` в `useCallback`, вы гарантируете, что это *одна и та же* функция между рендерами** (пока зависимости не изменятся). Вам *не нужно* оборачивать функцию в `useCallback`, если на это нет конкретной причины. В этом примере причина в том, что вы передаёте её в компонент, обёрнутый в [`memo`,](/reference/react/memo), что позволяет ему пропускать повторные рендеры. Есть и другие причины использовать `useCallback`, которые описаны далее на этой странице.
158+
**Оборачивая `handleSubmit` в `useCallback`, вы гарантируете, что это *одна и та же* функция между повторными рендерами** (пока зависимости не изменятся). Вам *не нужно* оборачивать функцию в `useCallback`, если на это нет конкретной причины. В этом примере причина в том, что вы передаёте её в компонент, обёрнутый в [`memo`,](/reference/react/memo) что позволяет ему пропускать повторные рендеры. Есть и другие причины использовать `useCallback`, которые описаны далее на этой странице.
159159
160160
<Note>
161161
@@ -167,7 +167,7 @@ function ProductPage({ productId, referrer, theme }) {
167167
168168
#### Как useCallback связан с useMemo? {/*how-is-usecallback-related-to-usememo*/}
169169
170-
Вы часто увидите [`useMemo`](/reference/react/useMemo) вместе с `useCallback`. . Оба они полезны при оптимизации дочернего компонента. Они позволяют вам [мемоизировать](https://en.wikipedia.org/wiki/Memoization) (или, другими словами, кешировать) что-то, что вы передаете вниз по иерархии:
170+
Вы часто увидите [`useMemo`](/reference/react/useMemo) вместе с `useCallback`. Они оба полезны при оптимизации дочернего компонента. Они позволяют вам [мемоизировать](https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%BC%D0%BE%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F) (или, другими словами, кешировать) что-то, что вы передаете вниз по иерархии:
171171
172172
```js {6-8,10-15,19}
173173
import { useMemo, useCallback } from 'react';
@@ -220,7 +220,7 @@ function useCallback(fn, dependencies) {
220220
221221
Кеширование функции с помощью `useCallback` полезно в нескольких случаях:
222222
223-
- Вы передаете её как пропс компоненту, обёрнутому в [`memo`.](/reference/react/memo). Вы хотите пропустить повторный рендер, если значение не изменилось. Меморизация позволяет вашему компоненту повторно рендериться только если зависимости изменились.
223+
- Вы передаете её как пропс компоненту, обёрнутому в [`memo`.](/reference/react/memo) Вы хотите пропустить повторный рендер, если значение не изменилось. Меморизация позволяет вашему компоненту повторно рендериться только если зависимости изменились.
224224
- Функция, которую вы передаёте, позже используется как зависимость в каком-то хуке. Например, другая функция, обёрнутая в `useCallback`, зависит от неё, или вы зависите от этой функции в [`useEffect.`](/reference/react/useEffect)
225225
226226
Нет смысла оборачивать функцию в `useCallback` в других случаях. Это не принесёт значительного вреда, поэтому некоторые команды решают не думать о конкретных случаях и мемоизируют как можно больше. Недостатком является то, что код становится менее читаемым. Кроме того, не всякая мемоизация эффективна: одно значение, которое «всегда новое», достаточно, чтобы сломать мемоизацию для всего компонента.
@@ -265,7 +265,7 @@ export default function App() {
265265
checked={isDark}
266266
onChange={e => setIsDark(e.target.checked)}
267267
/>
268-
Dark mode
268+
Тёмный режим
269269
</label>
270270
<hr />
271271
<ProductPage
@@ -405,7 +405,7 @@ export default function App() {
405405
checked={isDark}
406406
onChange={e => setIsDark(e.target.checked)}
407407
/>
408-
Dark mode
408+
Тёмный режим
409409
</label>
410410
<hr />
411411
<ProductPage
@@ -539,7 +539,7 @@ export default function App() {
539539
checked={isDark}
540540
onChange={e => setIsDark(e.target.checked)}
541541
/>
542-
Dark mode
542+
Тёмный режим
543543
</label>
544544
<hr />
545545
<ProductPage

0 commit comments

Comments
 (0)