Skip to content

Commit 68c4230

Browse files
docs: translate forwardRef.md to Русский
1 parent 1ac8041 commit 68c4230

1 file changed

Lines changed: 27 additions & 28 deletions

File tree

src/content/reference/react/forwardRef.md

Lines changed: 27 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
---
22
title: forwardRef
33
---
4-
54
<Deprecated>
65

7-
В React 19 `forwardRef` больше не нужен. Вместо этого передавайте `ref` как проп.
6+
В React 19 `forwardRef` больше не нужен. Вместо этого передавайте `ref` как пропс.
87

9-
`forwardRef` будет устаревшим в будущих релизах. Узнайте больше [здесь](/blog/2024/04/25/react-19#ref-as-a-prop).
8+
`forwardRef` будет устаревшим в будущем релизе. Узнайте больше [здесь](/blog/2024/04/25/react-19#ref-as-a-prop).
109

1110
</Deprecated>
1211

@@ -42,11 +41,11 @@ const MyInput = forwardRef(function MyInput(props, ref) {
4241

4342
#### Параметры {/*parameters*/}
4443

45-
* `render`: Функция рендеринга для вашего компонента. React вызывает эту функцию с `props` и `ref`, которые ваш компонент получил от родителя. JSX, который вы возвращаете, будет результатом вашего компонента.
44+
* `render`: Функция рендеринга для вашего компонента. React вызывает эту функцию с пропсами и `ref`, которые ваш компонент получил от родителя. Возвращаемый вами JSX будет результатом работы вашего компонента.
4645

4746
#### Возвращает {/*returns*/}
4847

49-
`forwardRef` возвращает React-компонент, который вы можете рендерить в JSX. В отличие от React-компонентов, определённых как обычные функции, компонент, возвращаемый `forwardRef`, также способен принимать проп `ref`.
48+
`forwardRef` возвращает React-компонент, который вы можете рендерить в JSX. В отличие от React-компонентов, определённых как обычные функции, компонент, возвращаемый `forwardRef`, также способен принимать пропс `ref`.
5049

5150
#### Особенности {/*caveats*/}
5251

@@ -78,15 +77,15 @@ const MyInput = forwardRef(function MyInput(props, ref) {
7877

7978
#### Возвращает {/*render-returns*/}
8079

81-
`forwardRef` возвращает React-компонент, который вы можете рендерить в JSX. В отличие от React-компонентов, определённых как обычные функции, компонент, возвращаемый `forwardRef`, способен принимать проп `ref`.
80+
`forwardRef` возвращает React-компонент, который вы можете рендерить в JSX. В отличие от React-компонентов, определённых как обычные функции, компонент, возвращаемый `forwardRef`, способен принимать пропс `ref`.
8281

8382
---
8483

8584
## Использование {/*usage*/}
8685

8786
### Предоставление DOM-узла родительскому компоненту {/*exposing-a-dom-node-to-the-parent-component*/}
8887

89-
По умолчанию DOM-узлы каждого компонента являются приватными. Однако иногда бывает полезно предоставить DOM-узел родительскому компоненту — например, чтобы позволить ему сфокусироваться на нём. Чтобы включить эту возможность, оберните определение вашего компонента в `forwardRef()`:
88+
По умолчанию DOM-узлы каждого компонента являются приватными. Однако иногда бывает полезно предоставить DOM-узел родителю — например, чтобы позволить ему сфокусироваться на нём. Чтобы включить эту возможность, оберните определение вашего компонента в `forwardRef()`:
9089

9190
```js {3,11}
9291
import { forwardRef } from 'react';
@@ -102,7 +101,7 @@ const MyInput = forwardRef(function MyInput(props, ref) {
102101
});
103102
```
104103

105-
Вы получите <CodeStep step={1}>ref</CodeStep> как второй аргумент после props. Передайте его DOM-узлу, который вы хотите предоставить:
104+
Вы получите <CodeStep step={1}>ref</CodeStep> как второй аргумент после пропсов. Передайте его DOM-узлу, который вы хотите предоставить:
106105

107106
```js {8} [[1, 3, "ref"], [1, 8, "ref", 30]]
108107
import { forwardRef } from 'react';
@@ -139,15 +138,15 @@ function Form() {
139138
}
140139
```
141140

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).
143142

144-
Имейте в виду, что предоставление ref к DOM-узлу внутри вашего компонента затрудняет изменение внутренних данных вашего компонента в будущем. Обычно вы предоставляете DOM-узлы из повторно используемых низкоуровневых компонентов, таких как кнопки или текстовые поля ввода, но не для компонентов уровня приложения, таких как аватар или комментарий.
143+
Имейте в виду, что предоставление ref к DOM-узлу внутри вашего компонента затрудняет изменение внутренних данных вашего компонента в будущем. Обычно вы будете предоставлять DOM-узлы из повторно используемых низкоуровневых компонентов, таких как кнопки или текстовые поля ввода, но не для компонентов уровня приложения, таких как аватар или комментарий.
145144

146-
<Recipes titleText="Примеры передачи ref">
145+
<Recipes titleText="Примеры перенаправления ref">
147146

148147
#### Фокусировка текстового поля ввода {/*focusing-a-text-input*/}
149148

150-
Нажатие на кнопку сфокусирует поле ввода. Компонент `Form` определяет ref и передаёт его компоненту `MyInput`. Компонент `MyInput` передаёт этот ref браузерному `<input>`. Это позволяет компоненту `Form` сфокусироваться на `<input>`.
149+
Нажатие на кнопку сфокусирует поле ввода. Компонент `Form` определяет ref и передаёт его компоненту `MyInput`. Компонент `MyInput` перенаправляет этот ref в браузерное поле ввода `<input>`. Это позволяет компоненту `Form` сфокусироваться на `<input>`.
151150

152151
<Sandpack>
153152

@@ -201,7 +200,7 @@ input {
201200

202201
#### Воспроизведение и пауза видео {/*playing-and-pausing-a-video*/}
203202

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>`.
205204

206205
<Sandpack>
207206

@@ -260,9 +259,9 @@ button { margin-bottom: 10px; margin-right: 10px; }
260259

261260
---
262261

263-
### Передача ref через несколько компонентов {/*forwarding-a-ref-through-multiple-components*/}
262+
### Перенаправление ref через несколько компонентов {/*forwarding-a-ref-through-multiple-components*/}
264263

265-
Вместо передачи `ref` к DOM-узлу, вы можете передать его своему собственному компоненту, такому как `MyInput`:
264+
Вместо перенаправления `ref` на DOM-узел, вы можете перенаправить его на собственный компонент, такой как `MyInput`:
266265

267266
```js {1,5}
268267
const FormField = forwardRef(function FormField(props, ref) {
@@ -276,7 +275,7 @@ const FormField = forwardRef(function FormField(props, ref) {
276275
});
277276
```
278277

279-
Если этот компонент `MyInput` передаёт ref своему `<input>`, то ref к `FormField` даст вам этот `<input>`:
278+
Если этот компонент `MyInput` перенаправляет ref на свой `<input>`, то ref на `FormField` даст вам этот `<input>`:
280279

281280
```js {2,5,10}
282281
function Form() {
@@ -297,7 +296,7 @@ function Form() {
297296
}
298297
```
299298

300-
Компонент `Form` определяет ref и передаёт его `FormField`. Компонент `FormField` передаёт этот ref в `MyInput`, который передаёт его браузерному DOM-узлу `<input>`. Таким образом `Form` получает доступ к этому DOM-узлу.
299+
Компонент `Form` определяет ref и передаёт его `FormField`. Компонент `FormField` перенаправляет этот ref в `MyInput`, который перенаправляет его в DOM-узел браузерного `<input>`. Таким образом `Form` получает доступ к этому DOM-узлу.
301300

302301

303302
<Sandpack>
@@ -377,7 +376,7 @@ input, button {
377376

378377
### Предоставление императивного обработчика вместо DOM-узла {/*exposing-an-imperative-handle-instead-of-a-dom-node*/}
379378

380-
Вместо предоставления всего DOM-узла, вы можете предоставить пользовательский объект, называемый *императивным обработчиком (imperative handle)*, с более ограниченным набором методов. Для этого вам потребуется определить отдельный ref для хранения DOM-узла:
379+
Вместо предоставления всего DOM-узла, вы можете предоставить пользовательский объект, называемый *императивным обработчиком*, с более ограниченным набором методов. Для этого вам потребуется определить отдельный ref для хранения DOM-узла:
381380

382381
```js {2,6}
383382
const MyInput = forwardRef(function MyInput(props, ref) {
@@ -389,7 +388,7 @@ const MyInput = forwardRef(function MyInput(props, ref) {
389388
});
390389
```
391390

392-
Передайте полученный `ref` в [`useImperativeHandle`](/reference/react/useImperativeHandle) и укажите значение, которое вы хотите предоставить `ref`:
391+
Передайте полученный `ref` в [`useImperativeHandle`](/reference/react/useImperativeHandle) и укажите значение, которое вы хотите предоставить для `ref`:
393392

394393
```js {6-15}
395394
import { forwardRef, useRef, useImperativeHandle } from 'react';
@@ -412,7 +411,7 @@ const MyInput = forwardRef(function MyInput(props, ref) {
412411
});
413412
```
414413

415-
Если какой-либо компонент получает ref к `MyInput`, он получит только ваш объект `{ focus, scrollIntoView }` вместо DOM-узла. Это позволяет вам ограничить информацию, которую вы предоставляете о вашем DOM-узле, до минимума.
414+
Если какой-либо компонент получит ref на `MyInput`, он получит только ваш объект `{ focus, scrollIntoView }` вместо DOM-узла. Это позволяет вам ограничить информацию, которую вы предоставляете о вашем DOM-узле, до минимума.
416415

417416
<Sandpack>
418417

@@ -471,25 +470,25 @@ input {
471470

472471
</Sandpack>
473472

474-
[Читайте больше об использовании императивных обработчиков.](/reference/react/useImperativeHandle)
473+
[Подробнее об использовании императивных обработчиков.](/reference/react/useImperativeHandle)
475474

476475
<Pitfall>
477476

478477
**Не злоупотребляйте refs.** Используйте refs только для *императивных* действий, которые вы не можете выразить через пропсы: например, прокрутка к узлу, фокусировка на узле, запуск анимации, выделение текста и т. д.
479478

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) могут помочь вам предоставлять императивные действия через пропсы.
481480

482481
</Pitfall>
483482

484483
---
485484

486485
## Устранение неполадок {/*troubleshooting*/}
487486

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*/}
489488

490-
Обычно это означает, что вы забыли использовать полученный `ref`.
489+
Обычно это означает, что вы забыли фактически использовать полученный `ref`.
491490

492-
Например, этот компонент ничего не делает со своим `ref`:
491+
Например, этот компонент ничего не делает с `ref`:
493492

494493
```js {1}
495494
const MyInput = forwardRef(function MyInput({ label }, ref) {
@@ -502,7 +501,7 @@ const MyInput = forwardRef(function MyInput({ label }, ref) {
502501
});
503502
```
504503

505-
Чтобы исправить это, передайте `ref` в DOM-узел или другой компонент, который может принимать `ref`:
504+
Чтобы исправить это, передайте `ref` вниз к DOM-узлу или другому компоненту, который может принять ref:
506505

507506
```js {1,5}
508507
const MyInput = forwardRef(function MyInput({ label }, ref) {
@@ -515,7 +514,7 @@ const MyInput = forwardRef(function MyInput({ label }, ref) {
515514
});
516515
```
517516

518-
`ref` для `MyInput` также может быть `null`, если некоторая логика является условной:
517+
`ref` на `MyInput` также может быть `null`, если некоторая логика является условной:
519518

520519
```js {1,5}
521520
const MyInput = forwardRef(function MyInput({ label, showInput }, ref) {
@@ -528,7 +527,7 @@ const MyInput = forwardRef(function MyInput({ label, showInput }, ref) {
528527
});
529528
```
530529

531-
Если `showInput` равно `false`, то `ref` не будет передан ни одному узлу, и `ref` для `MyInput` останется пустым. Это особенно легко упустить, если условие скрыто внутри другого компонента, как `Panel` в этом примере:
530+
Если `showInput` равно `false`, то ref не будет перенаправлен ни к одному узлу, и ref на `MyInput` останется пустым. Это особенно легко упустить, если условие скрыто внутри другого компонента, как `Panel` в этом примере:
532531

533532
```js {5,7}
534533
const MyInput = forwardRef(function MyInput({ label, showInput }, ref) {

0 commit comments

Comments
 (0)