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
*`render`: Функция рендеринга для вашего компонента. React вызывает эту функцию с `props` и `ref`, которые ваш компонент получил от родителя. JSX, который вы возвращаете, будет результатом вашего компонента.
44
+
*`render`: Функция рендеринга для вашего компонента. React вызывает эту функцию с пропсами и `ref`, которые ваш компонент получил от родителя. Возвращаемый вами JSX будет результатом работы вашего компонента.
46
45
47
46
#### Возвращает {/*returns*/}
48
47
49
-
`forwardRef` возвращает React-компонент, который вы можете рендерить в JSX. В отличие от React-компонентов, определённых как обычные функции, компонент, возвращаемый `forwardRef`, также способен принимать проп`ref`.
48
+
`forwardRef` возвращает React-компонент, который вы можете рендерить в JSX. В отличие от React-компонентов, определённых как обычные функции, компонент, возвращаемый `forwardRef`, также способен принимать пропс`ref`.
`forwardRef` возвращает React-компонент, который вы можете рендерить в JSX. В отличие от React-компонентов, определённых как обычные функции, компонент, возвращаемый `forwardRef`, способен принимать проп`ref`.
80
+
`forwardRef` возвращает React-компонент, который вы можете рендерить в JSX. В отличие от React-компонентов, определённых как обычные функции, компонент, возвращаемый `forwardRef`, способен принимать пропс`ref`.
По умолчанию DOM-узлы каждого компонента являются приватными. Однако иногда бывает полезно предоставить DOM-узел родительскому компоненту — например, чтобы позволить ему сфокусироваться на нём. Чтобы включить эту возможность, оберните определение вашего компонента в `forwardRef()`:
88
+
По умолчанию DOM-узлы каждого компонента являются приватными. Однако иногда бывает полезно предоставить DOM-узел родителю — например, чтобы позволить ему сфокусироваться на нём. Чтобы включить эту возможность, оберните определение вашего компонента в `forwardRef()`:
Вы получите <CodeStepstep={1}>ref</CodeStep> как второй аргумент после props. Передайте его DOM-узлу, который вы хотите предоставить:
104
+
Вы получите <CodeStepstep={1}>ref</CodeStep> как второй аргумент после пропсов. Передайте его DOM-узлу, который вы хотите предоставить:
106
105
107
106
```js {8} [[1, 3, "ref"], [1, 8, "ref", 30]]
108
107
import { forwardRef } from'react';
@@ -139,15 +138,15 @@ function Form() {
139
138
}
140
139
```
141
140
142
-
Этот компонент `Form`[передаёт ref](/reference/react/useRef#manipulating-the-dom-with-a-ref) в `MyInput`. Компонент `MyInput`*передаёт* этот ref в браузерный тег `<input>`. В результате компонент `Form` может получить доступ к этому DOM-узлу `<input>` и вызвать на нём [`focus()`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus).
141
+
Этот компонент `Form`[передаёт ref](/reference/react/useRef#manipulating-the-dom-with-a-ref) в `MyInput`. Компонент `MyInput`*перенаправляет* этот ref в браузерный тег `<input>`. В результате компонент `Form` может получить доступ к этому DOM-узлу `<input>` и вызвать на нём [`focus()`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus).
143
142
144
-
Имейте в виду, что предоставление ref к DOM-узлу внутри вашего компонента затрудняет изменение внутренних данных вашего компонента в будущем. Обычно вы предоставляете DOM-узлы из повторно используемых низкоуровневых компонентов, таких как кнопки или текстовые поля ввода, но не для компонентов уровня приложения, таких как аватар или комментарий.
143
+
Имейте в виду, что предоставление ref к DOM-узлу внутри вашего компонента затрудняет изменение внутренних данных вашего компонента в будущем. Обычно вы будете предоставлять DOM-узлы из повторно используемых низкоуровневых компонентов, таких как кнопки или текстовые поля ввода, но не для компонентов уровня приложения, таких как аватар или комментарий.
145
144
146
-
<RecipestitleText="Примеры передачи ref">
145
+
<RecipestitleText="Примеры перенаправления ref">
147
146
148
147
#### Фокусировка текстового поля ввода {/*focusing-a-text-input*/}
149
148
150
-
Нажатие на кнопку сфокусирует поле ввода. Компонент `Form` определяет ref и передаёт его компоненту `MyInput`. Компонент `MyInput`передаёт этот ref браузерному`<input>`. Это позволяет компоненту `Form` сфокусироваться на `<input>`.
149
+
Нажатие на кнопку сфокусирует поле ввода. Компонент `Form` определяет ref и передаёт его компоненту `MyInput`. Компонент `MyInput`перенаправляет этот ref в браузерное поле ввода`<input>`. Это позволяет компоненту `Form` сфокусироваться на `<input>`.
151
150
152
151
<Sandpack>
153
152
@@ -201,7 +200,7 @@ input {
201
200
202
201
#### Воспроизведение и пауза видео {/*playing-and-pausing-a-video*/}
203
202
204
-
Нажатие на кнопку вызовет [`play()`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/play) и [`pause()`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/pause) на DOM-узле `<video>`. Компонент `App` определяет ref и передаёт его компоненту `MyVideoPlayer`. Компонент `MyVideoPlayer`передаёт этот ref браузерному узлу`<video>`. Это позволяет компоненту `App` воспроизводить и ставить на паузу `<video>`.
203
+
Нажатие на кнопку вызовет [`play()`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/play) и [`pause()`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/pause) на DOM-узле `<video>`. Компонент `App` определяет ref и передаёт его компоненту `MyVideoPlayer`. Компонент `MyVideoPlayer`перенаправляет этот ref в браузерный узел`<video>`. Это позволяет компоненту `App` воспроизводить и ставить на паузу `<video>`.
Если этот компонент `MyInput`передаёт ref своему `<input>`, то ref к`FormField` даст вам этот `<input>`:
278
+
Если этот компонент `MyInput`перенаправляет ref на свой `<input>`, то ref на`FormField` даст вам этот `<input>`:
280
279
281
280
```js {2,5,10}
282
281
functionForm() {
@@ -297,7 +296,7 @@ function Form() {
297
296
}
298
297
```
299
298
300
-
Компонент `Form` определяет ref и передаёт его `FormField`. Компонент `FormField`передаёт этот ref в `MyInput`, который передаёт его браузерному DOM-узлу`<input>`. Таким образом `Form` получает доступ к этому DOM-узлу.
299
+
Компонент `Form` определяет ref и передаёт его `FormField`. Компонент `FormField`перенаправляет этот ref в `MyInput`, который перенаправляет его в DOM-узел браузерного`<input>`. Таким образом `Form` получает доступ к этому DOM-узлу.
301
300
302
301
303
302
<Sandpack>
@@ -377,7 +376,7 @@ input, button {
377
376
378
377
### Предоставление императивного обработчика вместо DOM-узла {/*exposing-an-imperative-handle-instead-of-a-dom-node*/}
379
378
380
-
Вместо предоставления всего DOM-узла, вы можете предоставить пользовательский объект, называемый *императивным обработчиком (imperative handle)*, с более ограниченным набором методов. Для этого вам потребуется определить отдельный ref для хранения DOM-узла:
379
+
Вместо предоставления всего DOM-узла, вы можете предоставить пользовательский объект, называемый *императивным обработчиком*, с более ограниченным набором методов. Для этого вам потребуется определить отдельный ref для хранения DOM-узла:
Передайте полученный `ref` в [`useImperativeHandle`](/reference/react/useImperativeHandle) и укажите значение, которое вы хотите предоставить `ref`:
391
+
Передайте полученный `ref` в [`useImperativeHandle`](/reference/react/useImperativeHandle) и укажите значение, которое вы хотите предоставить для `ref`:
Если какой-либо компонент получает ref к`MyInput`, он получит только ваш объект `{ focus, scrollIntoView }` вместо DOM-узла. Это позволяет вам ограничить информацию, которую вы предоставляете о вашем DOM-узле, до минимума.
414
+
Если какой-либо компонент получит ref на`MyInput`, он получит только ваш объект `{ focus, scrollIntoView }` вместо DOM-узла. Это позволяет вам ограничить информацию, которую вы предоставляете о вашем DOM-узле, до минимума.
416
415
417
416
<Sandpack>
418
417
@@ -471,25 +470,25 @@ input {
471
470
472
471
</Sandpack>
473
472
474
-
[Читайте больше об использовании императивных обработчиков.](/reference/react/useImperativeHandle)
473
+
[Подробнее об использовании императивных обработчиков.](/reference/react/useImperativeHandle)
475
474
476
475
<Pitfall>
477
476
478
477
**Не злоупотребляйте refs.** Используйте refs только для *императивных* действий, которые вы не можете выразить через пропсы: например, прокрутка к узлу, фокусировка на узле, запуск анимации, выделение текста и т. д.
479
478
480
-
**Если вы можете выразить что-то через пропсы, вам не следует использовать ref.** Например, вместо предоставления императивного обработчика вроде `{ open, close }` из компонента `Modal`, лучше принять `isOpen` как проп, например `<Modal isOpen={isOpen} />`. [Эффекты](/learn/synchronizing-with-effects) могут помочь вам предоставлять императивное поведение через пропсы.
479
+
**Если вы можете выразить что-то через пропс, вам не следует использовать ref.** Например, вместо предоставления императивного обработчика вроде `{ open, close }` из компонента `Modal`, лучше принять `isOpen` как пропс, например `<Modal isOpen={isOpen} />`. [Эффекты](/learn/synchronizing-with-effects) могут помочь вам предоставлять императивные действия через пропсы.
481
480
482
481
</Pitfall>
483
482
484
483
---
485
484
486
485
## Устранение неполадок {/*troubleshooting*/}
487
486
488
-
### Мой компонент обёрнут в `forwardRef`, но `ref`для него всегда `null` {/*my-component-is-wrapped-in-forwardref-but-the-ref-to-it-is-always-null*/}
487
+
### Мой компонент обёрнут в `forwardRef`, но `ref`на него всегда `null` {/*my-component-is-wrapped-in-forwardref-but-the-ref-to-it-is-always-null*/}
489
488
490
-
Обычно это означает, что вы забыли использовать полученный `ref`.
489
+
Обычно это означает, что вы забыли фактически использовать полученный `ref`.
491
490
492
-
Например, этот компонент ничего не делает со своим`ref`:
Если `showInput` равно `false`, то `ref` не будет передан ни одному узлу, и `ref` для`MyInput` останется пустым. Это особенно легко упустить, если условие скрыто внутри другого компонента, как `Panel` в этом примере:
530
+
Если `showInput` равно `false`, то ref не будет перенаправлен ни к одному узлу, и ref на`MyInput` останется пустым. Это особенно легко упустить, если условие скрыто внутри другого компонента, как `Panel` в этом примере:
0 commit comments