React Hooks – Loading data

Hiện nay sử dụng React Hook làm cho component trở nên gọn nhẹ và tiết kiệm được nhiều dòng code. React Hook đã đem đầy đủ life cycle của React lên cho functional component. Dưới đây là cách sử dụng useEffect để tải dữ liệu cho component.

react_hook

1. Tải dữ liệu khi First-Load.

Ta có thể sử dụng useEffect hôk với tham số thứ hai là mảng rỗng để tải dữ liệu lúc component mới được tải lên. Ta có thể tham khảo ví dụ dưới đây:


import React, { useEffect, useState } from "react";

export default function App() {

  const [data, setData] = useState({});
 
  const loadData = async () => {
 
    const res = await fetch("https://api.agify.io/?name=michael");

    setData(await res.json());
 };

 
  useEffect(() => {

    loadData();

    return () => {};

  }, []);


 return <p>{data.name}</p>;
}


Đoạn code trên tải dữ liệu từ API và lưu vào data thông qua setData.

Ta gọi loadData trong useEffect, với tham số thữ hai là chuỗi rỗng thì callback trong useEffect chỉ được gọi một lần duy nhất khi tải component lần đầu tiên.

React sẽ render dữ liệu tải về lên ui.

2. Tải dữ liệu khi props thay đổi

Khi ta thêm prop vào tham số thứ hai của useEffect thì khi prop thay đổi, callback (tham số thứ nhất) sẽ được gọi lại.

Ta có thể viết lại ví dụ trên như sau:


import React, { useEffect, useState } from "react";

export default function App() {

  const [data, setData] = useState({});
  const [name, setName] = useState("");

 
  const loadData = async () => {
 
    const res = await fetch("https://api.agify.io/?name=" + name);

    setData(await res.json());
 	
  };

 
  useEffect(() => {

    loadData();

    return () => {};

 }, [name]);


  return <div>
    <input value={name} onChange={(evt) => setName(evt.target.value)} />
    <p>{data.name}</p>
  <div>;


Với cập nhật trên thì khi name thay đổi, callback trong useEffect sẽ được gọi lại. React sau đó sẽ cập nhật lại giá trị vào data và render lại.

Tóm lại

Để gọi api trong React Hook thì ta nên dùng useEffect. Tham số thứ hai của useEffect sẽ quyết định khi nào gọi api. Nếu tham số hai là chuỗi rỗng thì api sẽ được gọi một lần duy nhất khi tải component. Nếu tham số hai có giá trị thì api sẽ được gọi mỗi khi giá trị đó thay đổi.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s