├── README.md
└── github-react-questions-main.jpg
/README.md:
--------------------------------------------------------------------------------
1 | # Запитання з React для підготовки до співбесіди 💙💛
2 |
3 |
4 |
5 | ### Список запитань
6 |
7 | | № | Назва запитання |
8 | | --- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
9 | | 1 | [Що таке React?](#що-таке-react) |
10 | | 2 | [Які основні переваги використання React?](#які-основні-переваги-використання-react) |
11 | | 3 | [Що таке JSX?](#що-таке-jsx) |
12 | | 4 | [Які основні відмінності між компонентами класів і функціональними компонентами в React?](#які-основні-відмінності-між-компонентами-класів-і-функціональними-компонентами-в-react) |
13 | | 5 | [Що таке Virtual DOM, та як він працює?](#що-таке-virtual-dom-та-як-він-працює) |
14 | | 6 | [Які методи життєвого циклу компонентів ви знаєте?](#які-методи-життєвого-циклу-компонентів-ви-знаєте) |
15 | | 7 | [Що таке "стан" (state) компонента в React?](#що-таке-стан-state-компонента-в-react) |
16 | | 8 | [Як оновити стан компонента?](#як-оновити-стан-компонента) |
17 | | 9 | [Що таке пропси (props) у React?](#що-таке-пропси-props-у-react) |
18 | | 10 | [У чому різниця між станом і пропсами в React?](#у-чому-різниця-між-станом-і-пропсами-в-react) |
19 | | 11 | [Як обробляти події в React?](#як-обробляти-події-в-react) |
20 | | 12 | [Що таке умовний рендеринг у React?](#що-таке-умовний-рендеринг-у-react) |
21 | | 13 | [Як передати дані між компонентами вгору та вниз за ієрархією?](#як-передати-дані-між-компонентами-вгору-та-вниз-за-ієрархією) |
22 | | 14 | [Як виконати HTTP-запити в React?](#як-виконати-http-запити-в-react) |
23 | | 15 | [Що таке контекст (context) у React і для чого він використовується?](#що-таке-контекст-context-у-react-і-для-чого-він-використовується) |
24 | | 16 | [Як реалізувати PureComponent?](#як-реалізувати-purecomponent) |
25 | | 17 | [Що таке ключі (keys) у списках React-елементів і навіщо вони потрібні?](#що-таке-ключі-keys-у-списках-react-елементів-і-навіщо-вони-потрібні) |
26 | | 18 | [Як використовувати стилі в React-компонентах?](#як-використовувати-стилі-в-react-компонентах) |
27 | | 19 | [Що таке «керовані компоненти» (controlled components)?](#що-таке-керовані-компоненти-controlled-components) |
28 | | 20 | [Що таке «некеровані компоненти» (uncontrolled components)?](#що-таке-некеровані-компоненти-uncontrolled-components) |
29 | | 21 | [Що таке «підйом стану» (lifting state up)?](#що-таке-підйом-стану-lifting-state-up) |
30 | | 22 | [Як створити форму в React?](#як-створити-форму-в-react) |
31 | | 23 | [Як реалізувати умовне додавання класу до елемента в React?](#як-реалізувати-умовне-додавання-класу-до-елемента-в-react) |
32 | | 24 | [Що таке фрагменти (fragments) у React?](#що-таке-фрагменти-fragments-у-react) |
33 | | 25 | [Яким чином можна оптимізувати продуктивність React-додатку?](#яким-чином-можна-оптимізувати-продуктивність-react-додатку) |
34 | | 26 | [Що таке HOC (Higher-Order Component) у React?](#що-таке-hoc-higher-order-component-у-react) |
35 | | 27 | [В чем разница между HOC и компонентами с рендер-пропсами (render props)?](#в-чем-разница-между-hoc-и-компонентами-с-рендер-пропсами-render-props) |
36 | | 28 | [Що таке рефи (refs) у React і як вони використовуються?](#що-таке-рефи-refs-у-react-і-як-вони-використовуються) |
37 | | 29 | [Як реалізувати анімацію в React-додатку?](#як-реалізувати-анімацію-в-react-додатку) |
38 | | 30 | [Як працює механізм "контексту" (context) для передачі даних?](#як-працює-механізм-контексту-context-для-передачі-даних) |
39 | | 31 | [Що таке портали (portals) у React?](#що-таке-портали-portals-у-react) |
40 | | 32 | [Як реалізувати lazy loading у React з використанням Suspense?](#як-реалізувати-lazy-loading-у-react-з-використанням-suspense) |
41 | | 33 | [Які нововведення було додано в React 16?](#які-нововведення-було-додано-в-react-16) |
42 | | 34 | [Як використовувати React DevTools для налагодження програми?](#як-використовувати-react-devtools-для-налагодження-програми) |
43 | | 35 | [Що таке "хуки" (hooks) у React і для чого вони використовуються?](#що-таке-хуки-hooks-у-react-і-для-чого-вони-використовуються) |
44 | | 36 | [Як створити власний хук у React?](#як-створити-власний-хук-у-react) |
45 | | 37 | [Як обробляти помилки в React-додатку за допомогою Error Boundary?](#як-обробляти-помилки-в-react-додатку-за-допомогою-error-boundary) |
46 | | 38 | [Як працює алгоритм узгодження (reconciliation) у React?](#як-працює-алгоритм-узгодження-reconciliation-у-react) |
47 | | 39 | [Які популярні бібліотеки для управління станом ви знаєте, крім вбудованого useState?](#які-популярні-бібліотеки-для-управління-станом-ви-знаєте-крім-вбудованого-usestate) |
48 | | 40 | [Яким чином можна оптимізувати рендеринг компонентів у React?](#яким-чином-можна-оптимізувати-рендеринг-компонентів-у-react) |
49 | | 41 | [Що таке "глибоке порівняння" (deep comparison) у контексті оптимізації продуктивності React?](#що-таке-глибоке-порівняння-deep-comparison-у-контексті-оптимізації-продуктивності-react) |
50 | | 42 | [Як використовувати memoization для оптимізації компонентів?](#як-використовувати-memoization-для-оптимізації-компонентів) |
51 | | 43 | [Які патерни використання Redux ви знаєте?](#які-патерни-використання-redux-ви-знаєте) |
52 | | 44 | [Як працює бібліотека React Router?](#як-працює-бібліотека-react-router) |
53 | | 45 | [Що таке SSR (Server-Side Rendering) та як він відрізняється від CSR (Client-Side Rendering)?](#що-таке-ssr-server-side-rendering-і-як-він-відрізняється-від-csr-client-side-rendering) |
54 | | 46 | [Як реалізувати асинхронне завантаження компонентів за допомогою React Router?](#як-реалізувати-асинхронне-завантаження-компонентів-за-допомогою-react-router) |
55 | | 47 | [Які переваги дає використання Redux для управління станом застосунку?](#які-переваги-дає-використання-redux-для-управління-станом-застосунку) |
56 | | 48 | [Що таке Redux Thunk?](#що-таке-redux-thunk) |
57 | | 49 | [Як працює Redux Saga?](#як-працює-redux-saga) |
58 | | 50 | [Як реалізувати ледаче завантаження Redux-редьюсерів?](#як-реалізувати-ледаче-завантаження-redux-редьюсерів) |
59 | | 51 | [Що таке "нормалізація стану" (state normalization) у контексті керування станом програми?](#що-таке-нормалізація-стану-state-normalization-у-контексті-керування-станом-програми) |
60 | | 52 | [Як створити анімований перехід між сторінками за допомогою React Router?](#як-створити-анімований-перехід-між-сторінками-за-допомогою-react-router) |
61 | | 53 | [Як працюють CSS-модулі (CSS Modules) у React?](#як-працюють-css-модулі-css-modules-у-react) |
62 | | 54 | [Що таке Styled Components, та як воно використовується?](#що-таке-styled-components-і-як-воно-використовується) |
63 | | 55 | [Як передати дані з сервера на клієнт під час використання SSR у React?](#як-передати-дані-з-сервера-на-клієнт-під-час-використання-ssr-у-react) |
64 | | 56 | [Які переваги та недоліки мають функціональні компоненти порівняно з компонентами класів?](#які-переваги-та-недоліки-мають-функціональні-компоненти-порівняно-з-компонентами-класів) |
65 | | 57 | [Які особливості мають хуки useEffect та useLayoutEffect?](#які-особливості-мають-хуки-useeffect-та-uselayouteffect) |
66 | | 58 | [Як оновити стан компонента після виконання асинхронної операції?](#як-оновити-стан-компонента-після-виконання-асинхронної-операції) |
67 | | 59 | [Що таке CSS-in-JS, та які бібліотеки ви знаєте для реалізації цієї концепції в React?](#що-таке-css-in-js-і-які-бібліотеки-ви-знаєте-для-реалізації-цієї-концепції-в-react) |
68 | | 60 | [Як реалізувати drag-and-drop функціональність у React-додатку?](#як-реалізувати-drag-and-drop-функціональність-у-react-додатку) |
69 | | 61 | [Як реалізувати аутентифікацію та авторизацію в React-додатку?](#як-реалізувати-аутентифікацію-та-авторизацію-в-react-додатку) |
70 | | 62 | [Як працює маршрутизація на стороні клієнта в React?](#як-працює-маршрутизація-на-стороні-клієнта-в-react) |
71 | | 63 | [Що таке «code splitting» (поділ коду) в React?](#що-таке-code-splitting-поділ-коду-в-react) |
72 | | 64 | [Як керувати станом між компонентами, що не мають близького зв'язку?](#як-керувати-станом-між-компонентами-що-не-мають-близького-звязку) |
73 | | 65 | [Які засоби надає React для тестування компонентів?](#які-засоби-надає-react-для-тестування-компонентів) |
74 | | 66 | [Як працює "ледаче завантаження" (lazy loading) компонентів у React?](#як-працює-ледаче-завантаження-lazy-loading-компонентів-у-react) |
75 | | 67 | [Що таке "синтетичні події" (synthetic events) у React?](#що-таке-синтетичні-події-synthetic-events-у-react) |
76 | | 68 | [Як організувати перевикористання компонентів у React?](#як-організувати-перевикористання-компонентів-у-react) |
77 | | 69 | [Що таке "високонавантажені компоненти" (high-order components) та як їх створити?](#що-таке-високонавантажені-компоненти-high-order-components-та-як-їх-створити) |
78 | | 70 | [Яких принципів слід дотримуватися під час іменування компонентів у React?](#яких-принципів-слід-дотримуватися-під-час-іменування-компонентів-у-react) |
79 | | 71 | [Як реалізувати анімацію переходів між компонентами в React Router?](#як-реалізувати-анімацію-переходів-між-компонентами-в-react-router) |
80 | | 72 | [Що таке "глибоке перенесення стану" (deep state transfer) у React?](#що-таке-глибоке-перенесення-стану-deep-state-transfer-у-react) |
81 | | 73 | [Як реалізувати модальне вікно в React-додатку?](#як-реалізувати-модальне-вікно-в-react-додатку) |
82 | | 74 | [Що таке SSR (Server-Side Rendering) і навіщо його використовувати?](#що-таке-ssr-server-side-rendering-і-навіщо-його-використовувати) |
83 | | 75 | [Які переваги дає використання CSS-модулів (CSS Modules)?](#які-переваги-дає-використання-css-модулів-css-modules) |
84 | | 76 | [Що таке "віртуалізація списку" (list virtualization) та як вона реалізується в React?](#що-таке-віртуалізація-списку-list-virtualization-і-як-вона-реалізується-в-react) |
85 | | 77 | [Як реалізувати include компонентів у React?](#як-реалізувати-include-компонентів-у-react) |
86 | | 78 | [Що таке "консиліація" (reconciliation) у контексті React?](#що-таке-консиліація-reconciliation-у-контексті-react) |
87 | | 79 | [Як обробляти форми в React?](#як-обробляти-форми-в-react) |
88 | | 80 | [Альтернативи Redux для керування станом у React-додатках?](#альтернативи-redux-для-керування-станом-у-react-додатках) |
89 | | 81 | [Як працює «гаряча заміна модулів» (Hot Module Replacement) у середовищі розробки React-додатків?](#як-працює-гаряча-заміна-модулів-hot-module-replacement-у-середовищі-розробки-react-додатків) |
90 | | 82 | [Що таке «мемоізація» (memoization) та як вона може бути застосована в React?](#що-таке-мемоізація-memoization-і-як-вона-може-бути-застосована-в-react) |
91 | | 83 | [Як реалізувати зв'язування даних (data binding) у React?](#як-реалізувати-зв'язування-даних-data-binding-у-react) |
92 | | 84 | [Що таке «передача даних через контекст» (context passing) у React?](#що-таке-передача-даних-через-контекст-context-passing-у-react) |
93 | | 85 | [Як реалізувати перетягування (drag-and-drop) елементів у React-додатку?](#як-реалізувати-перетягування-drag-and-drop-елементів-у-react-додатку) |
94 | | 86 | [Що таке «обчислювані властивості» (computed properties) у контексті React?](#що-таке-обчислювані-властивості-computed-properties-у-контексті-react) |
95 | | 87 | [Як реалізувати «ледаче завантаження» (lazy loading) зображень у React?](#як-реалізувати-ледаче-завантаження-lazy-loading-зображень-у-react) |
96 | | 88 | [Що таке «рендер-пропси» (render props) та як вони використовуються?](#що-таке-рендер-пропси-render-props-і-як-вони-використовуються) |
97 | | 89 | [Як працює «ледаче завантаження» (lazy loading) сторонніх бібліотек у React?](#як-працює-ледаче-завантаження-lazy-loading-сторонніх-бібліотек-у-react) |
98 | | 90 | [Що таке «реактивне програмування» (reactive programming) у контексті React?](#що-таке-реактивне-програмування-reactive-programming-у-контексті-react) |
99 | | 91 | [Як обробляти помилки під час використання хуків (hooks) у React?](#як-обробляти-помилки-під-час-використання-хуків-hooks-у-react) |
100 | | 92 | [Що таке «інкапсуляція стану» (state encapsulation) у React?](#що-таке-інкапсуляція-стану-state-encapsulation-у-react) |
101 | | 93 | [Як реалізувати анімований перехід між компонентами в React Native?](#як-реалізувати-анімований-перехід-між-компонентами-в-react-native) |
102 | | 94 | [Що таке «стабільні ідентифікатори» (stable keys) і навіщо вони потрібні в React?](#що-таке-стабільні-ідентифікатори-stable-keys-і-навіщо-вони-потрібні-в-react) |
103 | | 95 | [Як оновити стан компонента після зміни props?](#як-оновити-стан-компонента-після-зміни-props) |
104 | | 96 | [Що таке «компоненти вищого порядку» (Higher-Order Components, HOC) у React?](#що-таке-компоненти-вищого-порядку-higher-order-components-hoc-у-react) |
105 | | 97 | [Які є патерни для роботи з асинхронністю в React?](#які-є-патерни-для-роботи-з-асинхронністю-в-react) |
106 | | 98 | [Що таке «реактивний потік даних» (reactive data flow) у контексті React?](#що-таке-реактивний-потік-даних-reactive-data-flow-у-контексті-react) |
107 | | 99 | [Що таке Next.js, і різниця між Next.js і React?](#що-таке-nextjs-і-різниця-між-nextjs-і-react) |
108 |
109 | ### Що таке React?
110 |
111 | **React** - це бібліотека JavaScript, розроблена компанією Facebook, яка використовується для створення користувацьких інтерфейсів.
112 |
113 | Вона дає змогу розбивати призначений для користувача інтерфейс на невеликі компоненти, які можуть оновлюватися незалежно один від одного, що забезпечує ефективне управління станом й оновленнями на веб-сторінці.
114 |
115 | React використовує віртуальне DOM (Document Object Model) для оптимізації продуктивності, даючи змогу ефективно оновлювати тільки частини інтерфейсу, що змінилися.
116 |
117 | Однією з головних концепцій React є "односпрямований потік даних", що полегшує відстеження змін й управління станом програми. React широко використовується в розробці веб-додатків і мобільних додатків з використанням фреймворка React Native.
118 |
119 | [⬆ Повернутися до списку](#список-запитань)
120 |
121 | ### Які основні переваги використання React?
122 |
123 | Використання React має кілька ключових переваг:
124 |
125 | 1. **Віртуальний DOM:** React використовує віртуальний DOM для ефективного управління оновленнями інтерфейсу. Це дає змогу мінімізувати операції безпосередньо з реальним DOM, що підвищує продуктивність програми.
126 |
127 | 2. **Компонентний підхід:** React дає змогу розбивати користувацький інтерфейс на безліч дрібних компонентів. Ці компоненти можуть бути повторно використані, що спрощує розробку, тестування та обслуговування коду.
128 |
129 | 3. **Односпрямований потік даних:** React забезпечує односпрямований потік даних, що спрощує відстеження змін стану та робить код більш передбачуваним і легко підтримуваним.
130 |
131 | 4. **Оголошувальний підхід:** React використовує оголошувальний стиль програмування, який дає змогу описувати, який вигляд має мати інтерфейс залежно від стану. Це робить код більш читабельним і зрозумілим.
132 |
133 | 5. **Екосистема та співтовариство:** React має велику й активну спільноту розробників, що забезпечує безліч готових рішень, бібліотек та інструментів для розробки.
134 |
135 | 6. **React Native:** Для розробки мобільних додатків можна використовувати React Native, який дає змогу використовувати React для створення нативних мобільних додатків під різні платформи.
136 |
137 | 7. **Висока продуктивність:** Завдяки віртуальному DOM та оптимізаціям, React здатний забезпечувати хорошу продуктивність навіть під час роботи з великими та складними інтерфейсами.
138 |
139 | [⬆ Повернутися до списку](#список-запитань)
140 |
141 | ### Що таке JSX?
142 |
143 | **JSX** (JavaScript XML) - це розширення синтаксису JavaScript, що використовується в React для опису структури користувацького інтерфейсу.
144 |
145 | Цей синтаксис дає змогу об'єднувати код JavaScript і HTML-подібні елементи в одному місці, що робить створення компонентів React більш інтуїтивним і читабельним.
146 |
147 | JSX дає змогу вставляти JavaScript-вирази всередині тегів, укладаючи їх у фігурні дужки. Наприклад:
148 |
149 | ```jsx
150 | const name = "Микола";
151 | const element =
Привіт, {props.name}!
; 161 | } 162 | ``` 163 | 164 | JSX-код потрібно перетворити на звичайний JavaScript-код перед тим, як він буде виконаний у браузері. Для цього використовуються інструменти компіляції, зазвичай включені в складальний процес проекту на React. 165 | 166 | [⬆ Повернутися до списку](#список-запитань) 167 | 168 | ### Які основні відмінності між компонентами класів і функціональними компонентами в React? 169 | 170 | У React існують два основні способи створення компонентів: з використанням класів і з використанням функціональних компонентів. Ось основні відмінності між ними: 171 | 172 | #### Компоненти класів: 173 | 174 | 1. **Синтаксис:** Компоненти класів визначаються як класи, що розширюють базовий клас React.Component. 175 | 176 | 2. **Стан (state):** Компоненти класів мають вбудовану підтримку для стану (state), що дає їм змогу зберігати та керувати даними всередині компонента. 177 | 178 | 3. **Методи життєвого циклу:** Компоненти класів мають широкий набір методів життєвого циклу (наприклад, componentDidMount, componentDidUpdate, componentWillUnmount), які дають змогу реагувати на різні етапи життя компонента. 179 | 180 | 4. **Пропси (props):** Пропси передаються в компоненти класів через атрибути під час використання. Вони доступні через this.props всередині методів компонента. 181 | 182 | #### Функціональні компоненти: 183 | 184 | 1. **Синтаксис:** Функціональні компоненти визначаються як звичайні функції. 185 | 186 | 2. **Стан (state):** Спочатку функціональні компоненти не підтримували стан. Однак із появою хуків (hooks) у React (починаючи з React 16.8) функціональні компоненти тепер можуть використовувати стан та інші можливості, що раніше були доступні тільки компонентам класів. 187 | 188 | 3. **Хуки (hooks):** Функціональні компоненти можуть використовувати хуки, як-от useState, useEffect та інші, для керування станом, ефектами та іншими аспектами. 189 | 190 | 4. **Пропси (props):** Пропси також передаються функціональним компонентам, але доступні вони як аргументи функції. 191 | 192 | Загалом, з появою хуків, функціональні компоненти стали кращим вибором для більшості випадків у React, оскільки вони забезпечують простіший синтаксис, який можна прочитати, а також спрощений спосіб керування станом та ефектами. 193 | 194 | [⬆ Повернутися до списку](#список-запитань) 195 | 196 | ### Що таке Virtual DOM, та як він працює? 197 | 198 | Virtual DOM (віртуальне DOM) - це концепція, яку використовують у бібліотеках і фреймворках, як-от React, для оптимізації оновлень реального DOM (Document Object Model) і підвищення продуктивності веб-додатків. 199 | 200 | Реальний DOM - це представлення структури веб-сторінки в браузері у вигляді дерева об'єктів. Коли стан програми змінюється та потрібне оновлення інтерфейсу, браузер виконує зміни безпосередньо в реальному DOM. Однак багаторазові та часті оновлення реального DOM можуть бути витратними з погляду продуктивності, особливо для великих і складних інтерфейсів. 201 | 202 | Віртуальний DOM розв'язує цю проблему таким чином: 203 | 204 | 1. Створення віртуального DOM: Під час зміни стану застосунку React створює віртуальне представлення DOM-структури, яка є легковажною копією реального DOM. 205 | 206 | 2. Порівняння віртуального DOM: React порівнює попередній стан віртуального DOM із новим станом, виявляючи, які частини інтерфейсу було змінено. 207 | 208 | 3. Генерація різниці (патч): На основі порівняння React створює мінімальний набір змін, необхідних для оновлення віртуального DOM згідно з новим станом. 209 | 210 | 4. Застосування змін: Створені зміни застосовуються до реального DOM тільки одним оновленням, що дає змогу уникнути множинних маніпуляцій із реальним DOM. 211 | 212 | Використання віртуального DOM дає змогу значно поліпшити продуктивність, оскільки оновлення реального DOM відбуваються тільки в необхідних місцях. Це також робить розробку більш зручною та передбачуваною, оскільки розробнику не потрібно вручну керувати безліччю змін на реальному DOM. 213 | 214 | [⬆ Повернутися до списку](#список-запитань) 215 | 216 | ### Які методи життєвого циклу компонентів ви знаєте? 217 | 218 | У React компоненти проходять через низку етапів свого "життєвого циклу", включно з такими методами: 219 | 220 | 1. **constructor(props)**: Викликається під час створення компонента. Тут відбувається ініціалізація стану та прив'язка методів. 221 | 222 | 2. **componentDidMount()**: Викликається після того, як компонент було вставлено в DOM. Часто використовується для завантаження даних із сервера. 223 | 224 | 3. **componentDidUpdate(prevProps, prevState)**: Викликається після оновлення компонента. Дозволяє реагувати на зміни пропсів або стану. 225 | 226 | 4. **shouldComponentUpdate(nextProps, nextState)**: Дозволяє оптимізувати оновлення компонента, повертаючи false, якщо оновлення не потрібне. 227 | 228 | 5. **componentWillUnmount()**: Викликається перед видаленням компонента з DOM. Використовується для очищення ресурсів. 229 | 230 | 6. **static getDerivedStateFromProps(props, state)**: Рідко використовується. Дозволяє оновити стан на основі нових пропсів. 231 | 232 | 7. **getSnapshotBeforeUpdate(prevProps, prevState)**: Рідко використовується. Дозволяє отримати інформацію з DOM перед його оновленням. 233 | 234 | 8. **componentDidCatch(error, info)**: Використовується для обробки помилок у дочірніх компонентах. 235 | 236 | Це лише короткий огляд методів життєвого циклу компонентів у React. 237 | 238 | [⬆ Повернутися до списку](#список-запитань) 239 | 240 | ### Що таке "стан" (state) компонента в React? 241 | 242 | "Стан" (state) у React є об'єктом, який містить дані, що впливають на те, як компонент відображається та поводиться. Стан є одним із фундаментальних понять React і використовується для зберігання інформації, яка може змінюватися під час роботи програми. 243 | 244 | Коли стан компонента змінюється, React автоматично перерендерує компонент, щоб відобразити новий стан. Стан зазвичай ініціалізується в методі constructor() компонента, і для його оновлення використовується метод setState(). 245 | 246 | Приклад: 247 | 248 | ```jsx 249 | import React, { Component } from "react"; 250 | 251 | class Counter extends Component { 252 | constructor(props) { 253 | super(props); 254 | this.state = { 255 | count: 0, // Початковий стан 256 | }; 257 | } 258 | 259 | increment = () => { 260 | this.setState({ count: this.state.count + 1 }); 261 | }; 262 | 263 | render() { 264 | return ( 265 |Счетчик: {this.state.count}
267 | 268 |Счетчик: {this.state.count}
313 | 314 | 315 |{props.dataProp}
; 489 | }; 490 | 491 | export default ChildComponent; 492 | ``` 493 | 494 | #### Передавання даних вгору за ієрархією (від дочірнього компонента до батька): 495 | 496 | Колбеки (callback функції): Батьківський компонент передає функцію як пропса дочірньому компоненту. Дочірній компонент може викликати цю функцію, передаючи їй дані назад вгору по ієрархії. 497 | 498 | Приклад: 499 | 500 | ```jsx 501 | // Батьківський компонент 502 | import React, { useState } from "react"; 503 | import ChildComponent from "./ChildComponent"; 504 | 505 | const ParentComponent = () => { 506 | const [receivedData, setReceivedData] = useState(""); 507 | 508 | const handleDataChange = (data) => { 509 | setReceivedData(data); 510 | }; 511 | 512 | return ( 513 |Отримані дані: {receivedData}
515 |Завантаження...
; 582 | } 583 | 584 | if (error) { 585 | returnError: {error}
; 586 | } 587 | 588 | return ( 589 |{JSON.stringify(data, null, 2)}592 |
Name: {user.name}
633 |Role: {user.role}
634 |Введене значення: {inputValue}
818 |Вміст основного компонента
1419 |Вміст модального вікна
1421 |Вміст основного компоненту
1467 |Підрахунок: {count}
1595 | 1596 |Порахуйте: {count}
1700 | 1701 | 1702 |Вміст модального вікна...
3381 |Це дочірній компонент
; 3533 | }; 3534 | 3535 | // Потім ми можемо використовувати ChildComponent всередині ParentComponent 3536 | const ParentComponent = () => { 3537 | return ( 3538 |Введене значення: {this.state.inputValue}
3751 |Ім'я: {fullName}
3915 |Вік: {user.age}
3916 |4048 | Mouse position: {mouse.x}, {mouse.y} 4049 |
4050 | )} 4051 | /> 4052 |Something went wrong.
; 4200 | } 4201 | return this.props.children; 4202 | } 4203 | } 4204 | 4205 | export default ErrorBoundary; 4206 | ``` 4207 | 4208 | Використовуйте цей компонент-обгортку для ваших компонентів, де можливі помилки. 4209 | 4210 | #### 3) Custom Hook для обробки помилок: 4211 | 4212 | Ви можете створити власний хук для обробки помилок і використовувати його у ваших компонентах. 4213 | 4214 | ```jsx 4215 | import { useState } from "react"; 4216 | 4217 | function useErrorHandler() { 4218 | const [error, setError] = useState(null); 4219 | 4220 | const handleError = (error) => { 4221 | setError(error); 4222 | console.error("Error:", error); 4223 | }; 4224 | 4225 | const clearError = () => { 4226 | setError(null); 4227 | }; 4228 | 4229 | return [error, handleError, clearError]; 4230 | } 4231 | 4232 | export default useErrorHandler; 4233 | ``` 4234 | 4235 | #### 4) Бібліотеки для обробки помилок: 4236 | 4237 | Існують такі бібліотеки, як `react-error-boundary`, які надають компоненти для зручнішого оброблення помилок і виведення інформації про помилки в інтерфейсі. 4238 | 4239 | Обробка помилок під час використання хуків у React може залежати від конкретної ситуації та архітектури вашого застосунку. Важливо мати механізми для виявлення та відображення помилок, щоб зробити користувацький досвід більш інформативним і зрозумілим. 4240 | 4241 | [⬆ Повернутися до списку](#список-запитань) 4242 | 4243 | ### Що таке «інкапсуляція стану» (state encapsulation) у React? 4244 | 4245 | Інкапсуляція стану в React означає, що стан компонента, як-от дані, що можуть змінюватися в процесі виконання, підтримується та керується тільки всередині компонента та не доступний безпосередньо ззовні. Це дає змогу створювати компоненти з чітко визначеними інтерфейсами, через які взаємодія зі станом здійснюється шляхом виклику методів або звернення до певних властивостей. 4246 | 4247 | Інкапсуляція стану в React досягається шляхом використання внутрішнього стану компонента за допомогою `useState` або `this.state` (у класових компонентах). Компонент самостійно керує змінами свого стану та може вирішувати, коли та як оновлювати DOM на основі цього стану. 4248 | 4249 | Цей підхід сприяє модульності та покращує керованість коду. Компоненти можуть бути легко перевикористані, оскільки їхній внутрішній стан не впливає на інші компоненти. Зовнішні компоненти можуть взаємодіяти з внутрішнім станом через передачу props або виклики функцій-колбеків, які компонент надає. 4250 | 4251 | [⬆ Повернутися до списку](#список-запитань) 4252 | 4253 | ### Як реалізувати анімований перехід між компонентами в React Native? 4254 | 4255 | Для реалізації анімованих переходів між компонентами в React Native ви можете використовувати бібліотеки навігації або анімації. Ось приклади двох популярних способів: 4256 | 4257 | #### React Navigation з анімаціями: 4258 | 4259 | React Navigation - це популярна бібліотека для навігації в React Native, яка також підтримує анімовані переходи між екранами. Ви можете використовувати різні типи анімацій, такі як стандартні переходи, карусельні анімації тощо. Ось як це може виглядати: 4260 | 4261 | ```jsx 4262 | import { createAppContainer, createStackNavigator } from "react-navigation"; 4263 | 4264 | const StackNavigator = createStackNavigator( 4265 | { 4266 | Screen1: { screen: Screen1Component }, 4267 | Screen2: { screen: Screen2Component }, 4268 | }, 4269 | { 4270 | transitionConfig: () => ({ 4271 | screenInterpolator: (sceneProps) => { 4272 | // Тут ви можете визначити свою кастомну анімацію 4273 | // на основі sceneProps (інформація про поточний і попередній екрани) 4274 | }, 4275 | }), 4276 | } 4277 | ); 4278 | 4279 | const AppContainer = createAppContainer(StackNavigator); 4280 | export default AppContainer; 4281 | ``` 4282 | 4283 | #### React Native Navigation з анімаціями: 4284 | 4285 | React Native Navigation - це інша популярна бібліотека для навігації в React Native. Вона також надає можливість налаштовувати анімації при переходах між екранами. Приклад: 4286 | 4287 | ```jsx 4288 | import { Navigation } from "react-native-navigation"; 4289 | 4290 | Navigation.setRoot({ 4291 | root: { 4292 | stack: { 4293 | children: [ 4294 | { 4295 | component: { 4296 | name: "Screen1", 4297 | }, 4298 | }, 4299 | ], 4300 | }, 4301 | }, 4302 | }); 4303 | 4304 | // В іншому місці, де ви налаштовуєте екрани 4305 | Navigation.registerComponent("Screen1", () => Screen1Component); 4306 | Navigation.registerComponent("Screen2", () => Screen2Component); 4307 | ``` 4308 | 4309 | Обидва ці способи надають безліч можливостей для налаштування анімацій. Ви можете задавати свої власні анімації, використовуючи CSS-подібні властивості, або навіть під'єднувати бібліотеки для складніших анімацій. Важливо ознайомитися з документацією кожної бібліотеки, щоб зрозуміти, як реалізувати конкретні анімації, які ви хочете використовувати. 4310 | 4311 | [⬆ Повернутися до списку](#список-запитань) 4312 | 4313 | ### Що таке «стабільні ідентифікатори» (stable keys) і навіщо вони потрібні в React? 4314 | 4315 | Стабільні ідентифікатори, також відомі як «стабільні ключі» або «ключі з постійним значенням» (stable keys), у контексті React відносяться до значень, які використовуються як ключі під час рендерингу списків компонентів. Ці ключі повинні залишатися постійними для кожного елемента списку під час змін у даних, які впливають на рендеринг. 4316 | 4317 | У React, коли ви візуалізуєте список компонентів з використанням `map()` або інших методів, кожному елементу в списку потрібно присвоїти унікальний ключ. Ключі допомагають React визначити, які елементи були додані, видалені або змінені в списку. Це дає змогу React ефективно оновлювати тільки ті частини DOM, які змінилися, замість повного перемальовування всього списку. 4318 | 4319 | Значення ключів мають бути стабільними та унікальними для кожного елемента списку. Один із поширених підходів - використання унікальних ідентифікаторів із даних елементів як ключів. Наприклад: 4320 | 4321 | ```jsx 4322 | function ItemList({ items }) { 4323 | return ( 4324 |