- vừa được xem lúc

Hiểu rõ về Hook useEffect() trong React

0 0 4

Người đăng: Vinh Phạm

Theo Viblo Asia

Trong React, useEffect() là một Hook mạnh mẽ được sử dụng để thực hiện các hiệu ứng phụ trong các component chức năng. Các hiệu ứng phụ này có thể bao gồm việc lấy dữ liệu từ API, cập nhật DOM hoặc thiết lập timer. Bạn có thể hình dung nó như một cầu nối giữa component React của bạn và thế giới bên ngoài.

useEffect() nhận vào hai tham số: một hàm chứa logic hiệu ứng phụ và một mảng dependency tùy chọn. Hàm này sẽ được thực thi sau mỗi lần component render hoặc re-render.

Mảng dependency đóng vai trò như một người giám sát, cho phép bạn kiểm soát khi nào hiệu ứng phụ được chạy lại. Nếu bạn cung cấp một mảng rỗng ([]), hiệu ứng phụ sẽ chỉ chạy một lần duy nhất, sau lần render ban đầu.

Để hiểu rõ hơn về cách thức hoạt động của useEffect(), hãy cùng xem qua một số ví dụ thực tế. Giả sử bạn muốn tạo một component lấy dữ liệu người dùng từ một API.

import React, { useEffect, useState } from "react"; function DataFetchingComponent() { const [data, setData] = useState([]); const [error, setError] = useState(null); useEffect(() => { // Fetch data from an API fetch("https://jsonplaceholder.typicode.com/users") .then((response) => response.json()) .then((json) => setData(json)) .catch((err) => setError("Error fetching data")); }, []); return ( <div style={{ maxWidth: "1200px", margin: "0 auto", padding: "20px" }}> <h1 style={{ textAlign: "center", marginBottom: "20px", color: "#333" }}> Users Data </h1> <h2 style={{ textAlign: "center", marginBottom: "20px", color: "#333" }}> Understanding the useEffect() Hook in React By Sudhanshu Gaikwad </h2> {error ? ( <p style={{ color: "red", textAlign: "center" }}>{error}</p> ) : ( <table style={{ width: "100%", borderCollapse: "collapse", marginBottom: "20px", }} > <thead style={{ backgroundColor: "black", color: "white" }}> <tr> <th style={{ padding: "10px", textAlign: "left" }}>ID</th> <th style={{ padding: "10px", textAlign: "left" }}>Name</th> <th style={{ padding: "10px", textAlign: "left" }}>Username</th> <th style={{ padding: "10px", textAlign: "left" }}>Email</th> </tr> </thead> <tbody> {data.map((user) => ( <tr key={user.id} style={{ backgroundColor: user.id % 2 === 0 ? "#f2f2f2" : "white", borderBottom: "1px solid #ddd", }} > <td style={{ padding: "10px" }}>{user.id}</td> <td style={{ padding: "10px" }}>{user.name}</td> <td style={{ padding: "10px" }}>{user.username}</td> <td style={{ padding: "10px" }}>{user.email}</td> </tr> ))} </tbody> </table> )} </div> );
} export default DataFetchingComponent;

Trong ví dụ này, chúng ta sử dụng useEffect() để thực hiện một yêu cầu fetch đến API và cập nhật state data với dữ liệu nhận được. Do mảng dependency là rỗng, nên việc lấy dữ liệu chỉ diễn ra một lần duy nhất sau khi component được mount.

Một ví dụ khác là tạo một component timer đơn giản.

import React, { useState, useEffect } from "react"; function TimerComponent() { const [count, setCount] = useState(0); useEffect(() => { const interval = setInterval(() => { setCount((prevCount) => prevCount + 1); }, 1000); return () => clearInterval(interval); }, []); return ( <div style={{ display: "flex", justifyContent: "center", alignItems: "center", height: "100vh", backgroundColor: "#f0f4f8" }}> <div style={{ backgroundColor: "#fff", borderRadius: "10px", padding: "30px 50px", boxShadow: "0 4px 8px rgba(0, 0, 0, 0.1)", textAlign: "center" }}> <h1 style={{ fontSize: "3rem", fontFamily: "Roboto, sans-serif", color: "#333", margin: "0" }}>{count} seconds</h1> <p style={{ marginTop: "15px", fontSize: "1.2rem", color: "#666" }}>Timer running with useEffect hook</p> </div> </div> );
} export default TimerComponent;

Ở đây, useEffect() được sử dụng để thiết lập một setInterval cập nhật state count mỗi giây. Hàm trả về trong useEffect() đảm bảo việc dọn dẹp setInterval khi component bị unmount, ngăn chặn rò rỉ bộ nhớ.

Tóm lại, useEffect() là một công cụ không thể thiếu khi làm việc với các hiệu ứng phụ trong React. Bằng cách hiểu rõ cách hoạt động và sử dụng mảng dependency một cách hiệu quả, bạn có thể tạo ra các component React mạnh mẽ và dễ bảo trì hơn.

Cảm ơn các bạn đã theo dõi.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tìm hiểu về Redux Thunk

Chào mọi người, nếu bạn là người đã biết về React và đang làm quen với Redux chắc hẳn bạn đang rất mơ hồ về các khái niệm cơ bản của Redux như dispatch, store, action creator,... bạn còn đang vật lộn với đống document của Redux để hiểu những khái niệm đó và bạn nghe ai đó trong team nói về Redux Thu

0 0 399

- vừa được xem lúc

[React] Giới thiệu tổng quát về Redux Toolkit

1. Redux Toolkit (RTK) là gì và tại sao lại có nó. . .

0 0 6.6k

- vừa được xem lúc

Uống Pepsi code Vue đi - Uống Cocacola code React nha ;)

. (Nguồn ảnh: Internet). Chào các bạn, chào các bạn. Let's go . 1.

0 0 146

- vừa được xem lúc

Cài đặt taillwind css cho dự án React

Trong bài viết cùng mình tìm hiểu cách cài đặt tailwind css cho một dự án React sẵn có. .

0 0 146

- vừa được xem lúc

Formik vs React Hook Form (Phần 1)

Các lập trình viên Front End đều làm việc rất nhiều với form cùng sự phức tạp của ứng dụng. Do vậy chúng ta cần những thư viện form mạnh mẽ hỗ trợ quản lý các form state, form validation... Thành phần module. Formik bao gồm có 9 dependencies khác. . React Hook Form thì không có.

0 0 371

- vừa được xem lúc

Hướng dẫn React Redux cho người mới bắt đầu - Phần 1

Lời mởi đầu. Chào các bạn, ở thời điểm thực hiện bài viết này mình cũng là một người đang bắt đầu tìm hiểu và học với ReactJs và Redux, trong quá trình tìm hiểu đọc các tài liệu về thư viện này mình có tìm được một bài hướng dẫn khá hay nên đã quyết định chia sẻ với mọi người .

0 0 280