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
Викличте `useImperativeHandle` на верхньому рівні вашого компонента, щоб кастомізувати об'єкт посилання, який повертає реф:
23
+
Викличте `useImperativeHandle` на верхньому рівні вашого компонента, щоб налаштувати дескриптор рефа, доступного з нього:
24
24
25
25
```js
26
26
import { useImperativeHandle } from'react';
@@ -38,11 +38,11 @@ function MyInput({ ref }) {
38
38
39
39
#### Параметри {/*parameters*/}
40
40
41
-
* `ref`: `Реф`, який ви отримали як проп у компоненті `MyInput`.
41
+
* `ref`: `ref`, який ви отримали як проп у компоненті `MyInput`.
42
42
43
-
* `createHandle`: Функція, яка не приймає аргументів і повертає об'єкт посилання, який ви хочете надати. Цей об’єкт може бути будь-якого типу. Зазвичай, ви повертатимете об'єкт з методами, які ви захочете використовувати.
43
+
* `createHandle`: Функція, яка не приймає аргументів і повертає дескриптор рефа, до якого ви хочете надати доступ. Дескриптор може бути будь-якого типу. Зазвичай, ви повертатимете об'єкт із методами, до яких ви хочете надати доступ.
44
44
45
-
* **Опціональний параметр** `dependencies`: Список усіх реактивних значень, на які посилається код `createHandle`. Реактивні значення включають в себе пропси, стан та всі змінні та функції, оголошені безпосередньо в тілі компонента. Якщо ваш лінтер [налаштований для Реакту](/learn/editor-setup#linting), він перевірить, чи кожне реактивне значення вказане як залежність. Список залежностей повинен містити стале число елементів, записаних в рядок як `[залежність1, залежність2, залежність3]`. Реакт порівняє кожну залежність із своїм попереднім значенням використовуючи порівняння [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is). Якщо повторний рендер призвів до зміни однієї із залежностей або якщо ви пропустили даний аргумент, ваша `createHandle` функція буде виконана повторно і новостворений об'єкт посилання буде призначений до рефу.
45
+
* **Опційний параметр** `dependencies`: Список усіх реактивних значень, на які посилається код `createHandle`. Реактивні значення охоплюють пропси, стан і всі змінні та функції, оголошені безпосередньо в тілі компонента. Якщо ваш лінтер [налаштований для React](/learn/editor-setup#linting), він перевірить, чи кожне реактивне значення вказане як залежність. Список залежностей повинен містити стале число елементів, записаних у рядок як `[залежність1, залежність2, залежність3]`. React порівняє кожну залежність із своїм попереднім значенням, використовуючи функцію [`Object.is`](https://webdoky.org/uk/docs/Web/JavaScript/Reference/Global_Objects/Object/is). Якщо повторний рендер призвів до зміни однієї із залежностей або якщо ви пропустили даний аргумент, ваша функція `createHandle` виконуватиметься повторно, і новостворений дескриптор буде призначений рефу.
46
46
47
47
<Note>
48
48
@@ -128,9 +128,9 @@ export default function Form() {
128
128
129
129
return (
130
130
<form>
131
-
<MyInput placeholder="Enter your name" ref={ref} />
### Передавання власних імперативних методів {/*exposing-your-own-imperative-methods*/}
173
+
### Надання доступу до власних імперативних методів {/*exposing-your-own-imperative-methods*/}
174
174
175
-
Методи, які ви передаєте через імперативний обробник не обов'язково мають точно відповідати DOM методам. Наприклад, даний компонент `Post` передає метод `scrollAndFocusAddComment` через імперативний обробник. Це дозволяє батьківському компоненту `Page`гортати список коментарів *і* фокусуватись на полі введення, коли ви натискаєте кнопку:
175
+
Методи, які ви передаєте через імперативний дескриптор, не обов'язково мають точно збігатися з DOM методами. Наприклад, цей компонент `Post` передає метод `scrollAndFocusAddComment` через дескриптор. Це дає батьківському компоненту `Page`змогу прогорнути список коментарів *і* фокусувати поле введення, коли ви натискаєте кнопку:
176
176
177
177
<Sandpack>
178
178
@@ -190,7 +190,7 @@ export default function Page() {
190
190
return (
191
191
<>
192
192
<button onClick={handleClick}>
193
-
Write a comment
193
+
Написати коментар
194
194
</button>
195
195
<Post ref={postRef} />
196
196
</>
@@ -219,7 +219,7 @@ function Post({ ref }) {
219
219
return (
220
220
<>
221
221
<article>
222
-
<p>Welcome to my blog!</p>
222
+
<p>Вітаю на моєму блозі!</p>
223
223
</article>
224
224
<CommentList ref={commentsRef} />
225
225
<AddComment ref={addCommentRef} />
@@ -248,7 +248,7 @@ function CommentList({ ref }) {
**Не зловживайте рефами.** Використовуйте рефи лише для *імперативної* поведінки, яку ви не можете виразити через пропси: наприклад, пролистування до вузла DOM, фокусування на вузлі, виклик анімації, виділення тексту тощо.
288
+
**Не зловживайте рефами.** Використовуйте рефи лише для *імперативної* поведінки, яку ви не можете виразити через пропси: наприклад, прогортування до вузла DOM, фокусування вузла, виклик анімації, виділення тексту тощо.
289
289
290
-
**Якщо ви можете виразити щось як проп, тоді не варто використовувати реф.** Наприклад, замість передачі імперативного обробника у вигляді `{ open, close }`з компоненту`Modal`, кращим підходом буде використати проп `isOpen`у такому вигляді `<Modal isOpen={isOpen} />`. [Effects](/learn/synchronizing-with-effects) може допомогти вам задавати імперативну поведінку через пропси.
290
+
**Якщо ви можете виразити щось як проп, тоді не варто використовувати реф.** Наприклад, замість передавання імперативного дескриптора як `{ open, close }`із компонента`Modal`, краще використати проп `isOpen`як `<Modal isOpen={isOpen} />`. [Ефекти](/learn/synchronizing-with-effects) можуть допомогти вам надати доступ до імперативних частин через пропси.
0 commit comments