Обробка Побічних Ефектів за Допомогою useEffect
Свайпніть щоб показати меню
Хук useEffect дозволяє синхронізувати компонент із зовнішніми факторами чи сервісами, включаючи отримання даних, підписки, ручні зміни тощо.
Синтаксис:
Перший аргумент (setup) — це стрілочна функція, яка буде виконуватися після кожного рендеру. Другий аргумент (dependencies) — це необов'язковий масив залежностей. Якщо dependencies вказані, ефект буде виконуватися лише у випадку зміни однієї із залежностей з моменту останнього рендеру. Якщо масив залежностей не вказано, ефект виконуватиметься після кожного рендеру.
useEffect(setup, dependencies)
Оскільки відомо, що setup має бути стрілочною функцією, а dependencies — масивом, отримуємо наступний запис для хука useEffect.
useEffect(() => {
// Something that we need to do
// after the component is rendered or updated
}, [<optional_dependencies>])
Компоненти React часто залежать від поєднання хуків useEffect та useState. Ці хуки працюють разом для керування станом і побічними ефектами всередині компонентів.
Приклад 1:
Створення компонента Articles, який використовує хук useEffect для присвоєння даних стану articles. Це чудова можливість дослідити потужне поєднання React-хуків.
import { useEffect, useState } from "react";
import fetchData from "../service/api";
const Articles = () => {
const [articles, setArticles] = useState([]);
useEffect(() => {
fetchData()
.then((resp) => {
setArticles(resp.jokes);
})
.catch((error) => {
console.error(error);
});
}, []);
return (
// Render some markup based on the articles data
);
};
У цьому компоненті використовується хук useEffect, щоб переконатися, що стан articles заповнений даними. Як зазначалося раніше, функція useEffect виконується після кожного рендеру, що гарантує відображення даних користувачу, якщо вони отримані. Це забезпечує безперервний користувацький досвід з актуальним контентом.
Пояснення по рядках:
- Рядок 1: Імпортуємо хуки
useEffectтаuseStateз бібліотеки React для використання їх функціоналу; - Рядок 2: Імпортуємо функцію
fetchDataз "../service/api". Ця функція відповідає за виконання API-запиту та отримання даних; - Рядок 4: Компонент
Articlesвизначено за допомогою стандартного синтаксису функції; - Рядок 5: Ініціалізуємо стан за допомогою хука
useState, що представляє початкове значення змінноїarticles. У цьому прикладі це порожній масив; - Рядки 7-15: Реальний приклад використання хука
useEffect;- Рядок 7 та рядок 15: це синтаксис. Так ми будемо його використовувати;
- Рядок 8: викликається функція
fetchData. Очікується, що ця функція зробить API-запит і поверне проміс; - Рядки 9-11: Коли проміс виконується (
thenблок), отримуємо об'єктresp. Дані витягуються зrespчерезresp.jokesі встановлюються у станarticlesза допомогоюsetArticles; - Рядки 12-14: Якщо під час API-запиту виникає помилка (у блоці
catch), вона виводиться у консоль черезconsole.error.
- Рядки 17-19: Відображення розмітки компонента.
Приклад 2:
Створимо компонент Counter для відстеження значення counter. Завдання — виводити значення змінної counter щоразу, коли воно змінюється. Для цього використаємо хук useEffect з масивом залежностей, що містить змінну counter.
import React, { useState, useEffect } from "react";
const Counter = () => {
const [count, setCount] = useState(0);
useEffect(() => {
console.log("Count has changed:", count);
}, [count]);
const handleIncrement = () => {
setCount(count + 1);
};
return (
<div>
<p>Count: {count}</p>
<button onClick={handleIncrement}>Increment</button>
</div>
);
};
Пояснення по рядках:
- Рядок 1: Імпортуємо хуки
useEffectтаuseStateз бібліотеки React для використання їх функціоналу; - Рядок 3: Стандартний синтаксис функції визначає компонент "Counter";
- Рядок 4: Ініціалізуємо стан за допомогою хука
useState, що представляє початкове значення змінноїcount. У цьому прикладі це0; - Рядки 6-8: Реальний приклад використання хука
useEffect;- Рядок 7: ця логіка буде виконуватись щоразу, коли значення у масиві залежностей змінюється. У цьому випадку — це змінна
count; - Рядок 8: масив залежностей. Ми повідомляємо React, що коли значення змінної
countзмінюється, потрібно виконати код усередині функції хукаuseEffect.
- Рядок 7: ця логіка буде виконуватись щоразу, коли значення у масиві залежностей змінюється. У цьому випадку — це змінна
- Рядки 14-19: Відображення розмітки компонента.
Будь ласка, зверніть увагу на консоль і спостерігайте за логікою виконання стрілочної функції всередині хука useEffect. Стрілочна функція виконується під час початкового рендеру, а потім викликається знову щоразу, коли змінюється значення змінної counter. Ви можете перевірити цю поведінку, спостерігаючи відповідні логи у консолі.
1. Яке призначення хука useEffect у React?
2. Які два основні аргументи приймає хук useEffect?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат