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
`forwardRef` вяртае кампанент React, які можа быць адрэндэраны праз JSX. У адрозненні ад кампанентаў, вызначаных з дапамогай звычайных функцый, кампанент, вызначаны праз `forwardRef` здольны таксама прымаць пропс `ref`.
41
+
`forwardRef` вяртае кампанент React, які можа быць адрэндэраны праз JSX. У адрозненні ад кампанентаў, вызначаных з дапамогай звычайных функцый, кампанент, вызначаны праз `forwardRef`, здольны таксама прымаць пропс `ref`.
42
42
43
-
#### Нюансы {/*caveats*/}
43
+
#### Перасцярогі {/*caveats*/}
44
44
45
-
* У Строгім рэжыме, React будзе **выклікаць функцыю рэндэрынгу двойчы** каб [дапамагчы знайсці выпадковыя нячыстасці](#my-initializer-or-updater-function-runs-twice). Такія паводзіны адбываюцца толькі ў працоўным асяроддзі і ніяк не ўплываюць на працоўнае. Калі функцыя вашага кампанента чыстая (якой яна мае быць), гэта не мае ўплываць на логіку кампанента. Вынік аднаго з выклікаў будзе праігнараваны.
45
+
* У Строгім рэжыме, React будзе **выклікаць функцыю рэндэрынгу двойчы** каб [дапамагчы знайсці выпадковыя нячыстасці](#my-initializer-or-updater-function-runs-twice). Такія паводзіны адбываюцца толькі ў асяроддзі для распрацоўкі і ніяк не ўплываюць на працоўнае. Калі функцыя вашага кампанента чыстая (якой яна мае быць), гэта не павінна ўплываць на логіку кампанента. Вынік аднаго з выклікаў будзе праігнараваны.
*`props`: Пропсы, перададзеныя з бацькоўскага кампанента.
68
68
69
-
*`ref`: Атрыбут `ref`, перададзены з бацькоўскага кампанента. `ref` можа быць аб’ектам ці функцыяй. Калі бацькоўскі кампанент не перадаў рэф, значэннем будзе `null`. Вы маеце перадаць атрыманы `ref`ці ў іншы кампанент, ці ў [`useImperativeHandle`.](/reference/react/useImperativeHandle)
69
+
*`ref`: Атрыбут `ref`, перададзены з бацькоўскага кампанента. `ref` можа быць аб’ектам ці функцыяй. Калі бацькоўскі кампанент не перадаў рэф, значэннем будзе `null`. Вы маеце перадаць атрыманы `ref`у іншы кампанент ці ў [`useImperativeHandle`.](/reference/react/useImperativeHandle)
70
70
71
71
#### Значэнні, якія вяртаюцца {/*render-returns*/}
### Раскрыццё вузла DOM кампанента бацькоўскаму {/*exposing-a-dom-node-to-the-parent-component*/}
80
80
81
-
Першапачаткова вузлы DOM кожнага з кампанентаў прыватныя. Але ж, часам бывае карысна адкрыць вузел для бацькоўскага кампанента. Напрыклад, каб дазволіць сфакусавацца на ім. Каб гэта зрабіць, абгарніце вызначэнне вашага кампанента ў `forwardRef()`:
81
+
Першапачаткова вузлы DOM кожнага з кампанентаў прыватныя. Але ж, часам бывае карысна адкрыць вузел для бацькоўскага кампанента. Напрыклад, каб дазволіць сфакусіравацца на ім. Каб гэта зрабіць, абгарніце вызначэнне вашага кампанента ў `forwardRef()`:
82
82
83
83
```js {3,11}
84
84
import { forwardRef } from'react';
@@ -124,7 +124,7 @@ function Form() {
124
124
<form>
125
125
<MyInput label="Увядзіце вашае імя:" ref={ref} />
126
126
<button type="button" onClick={handleClick}>
127
-
Edit
127
+
Рэдагаваць
128
128
</button>
129
129
</form>
130
130
);
@@ -133,13 +133,13 @@ function Form() {
133
133
134
134
Дадзены кампанент `Form`[задае рэф](/reference/react/useRef#manipulating-the-dom-with-a-ref) для `MyInput`. Кампанент `MyInput`*перанакіроўвае* гэты рэф да тэга `<input>`. У выніку кампанент `Form` можа атрымаць доступ да вузла DOM `<input>` і выклікаць ягоны метад [`focus()`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus).
135
135
136
-
Памятайце, што раскрыццё рэфа вузла DOM унутры кампанента ўскладняе змену ўнутраных часцей кампанента пазней. Звычайна вам можа спатрэбіцца раскрыццё вузлоў DOM для нізкаўзроўневых кампанентаў, якія вы будзеце перавыкарыстоўваць, такіх як кнопкі ці палі ўводу тэксту, але, не для болей высоўкаўзроўневых, такіх як аватары ці каментарыі.
136
+
Памятайце, што раскрыццё рэфа вузла DOM унутры кампанента ўскладняе змену ўнутраных часцей кампанента пазней. Звычайна вам можа спатрэбіцца раскрыццё вузлоў DOM для нізкаўзроўневых кампанентаў, якія вы будзеце перавыкарыстоўваць, такіх як кнопкі ці палі ўводу тэксту, але не для болей высоўкаўзроўневых, такіх як аватары ці каментарыі.
#### Факусаванне на полі ўводу тэксту {/*focusing-a-text-input*/}
140
+
#### Факусіраванне на полі ўводу тэксту {/*focusing-a-text-input*/}
141
141
142
-
Націсканне кнопкі прывядзе на факусаванні на полі ўводу. Кампанент `Form` вызначае рэф і перадае яго ў кампанент `MyInput`. Кампанент `MyInput` перанакіроўвае гэты рэф да элемента `<input>`. Гэта дазваляе кампаненту `Form` зрабіць факусаванне на `<input>`.
142
+
Націсканне кнопкі прывядзе да факусіравання на полі ўводу. Кампанент `Form` вызначае рэф і перадае яго ў кампанент `MyInput`. Кампанент `MyInput` перанакіроўвае гэты рэф да элемента `<input>`. Гэта дазваляе кампаненту `Form` зрабіць факусіраванне на `<input>`.
Калі які-небудзь кампанент перадасць рэф у `MyInput`, ён атрымае толькі ваш аб’ект `{ focus, scrollIntoView }` замест вузла DOM. Гэта дазваляе лімітаваць інфармацыю, якую вы хочаце раскрыць пра ваш вузел DOM, да мінімуму.
407
+
Калі які-небудзь кампанент перадасць рэф у `MyInput`, ён атрымае толькі ваш аб’ект `{ focus, scrollIntoView }` замест вузла DOM. Гэта дазваляе абмяжоўваць інфармацыю, якую вы хочаце раскрыць пра ваш вузел DOM, да мінімуму.
408
408
409
409
<Sandpack>
410
410
@@ -467,15 +467,15 @@ input {
467
467
468
468
<Pitfall>
469
469
470
-
**Не выкарыстоўвайце рэфы болей, чым трэба.** Варта выкарыстоўваць рэфы толькі для загаднага кіравання, якое нельга зрабіць праз пропсы: напрыклад, каб прагартаць да вузла, сфакусавацца на ім, пачаць анімацыю, вылучыць тэкст і г.д.
470
+
**Не выкарыстоўвайце рэфы болей, чым трэба.** Варта выкарыстоўваць рэфы толькі для загаднага кіравання, якое нельга зрабіць праз пропсы: напрыклад, каб прагартаць да вузла, сфакусіравацца на ім, пачаць анімацыю, вылучыць тэкст і г.д.
471
471
472
-
**Калі штосьці можна выразіць пропсамі, не варта выкарыстоўваць для гэтага рэфы.** Напрыклад, замест раскрыцця загаднага кіравання, напрыклад вось такога: `{ open, close }` з кампанент`Modal`, лепей порымаць`isOpen` як пропс, напрыклад: `<Modal isOpen={isOpen} />`. [Эфекты](/learn/synchronizing-with-effects) могуць дапамагчы раскрыць загаднае кіраванне ў выглядзе пропсаў.
472
+
**Калі штосьці можна выразіць пропсамі, не варта выкарыстоўваць для гэтага рэфы.** Напрыклад, замест раскрыцця падобнага загаднага кіравання: `{ open, close }` з кампанента`Modal`, лепей прымаць`isOpen` як пропс, напрыклад: `<Modal isOpen={isOpen} />`. [Эфекты](/learn/synchronizing-with-effects) могуць дапамагчы раскрыць загаднае кіраванне ў выглядзе пропсаў.
473
473
474
474
</Pitfall>
475
475
476
476
---
477
477
478
-
## Магчымыя непаладкі {/*troubleshooting*/}
478
+
## Дыягностыка непаладак {/*troubleshooting*/}
479
479
480
480
### Мой кампанент абгорнуты ў `forwardRef`, але `ref` заўсёды `null` {/*my-component-is-wrapped-in-forwardref-but-the-ref-to-it-is-always-null*/}
Калі значэнне `showInput` роўнае `false`, рэф не будзе перададзены ніводнаму вузлу, і рэф `MyInput` застанецца пустым. Падобнае лёгка прапусціць, калі ўмова схаваная ўнутры іншага кампанента, як з гэтым кампанентам`Panel` у прыкладзе:
523
+
Калі значэнне `showInput` роўнае `false`, рэф не будзе перададзены ніводнаму вузлу, і рэф `MyInput` застанецца пустым. Падобнае лёгка прапусціць, калі ўмова схаваная ўнутры іншага кампанента, як у гэтым кампаненце`Panel` у прыкладзе:
0 commit comments