Обробка Побічних Ефектів за Допомогою Хука 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?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 2.17
Обробка Побічних Ефектів за Допомогою Хука 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?
Дякуємо за ваш відгук!