Chúng ta có thể bắt sự kiện componentDidMount trong một functional component bằng cách sử dụng useEffect và chỉ định arrayDependencies là một mảng rỗng:
//Gọi React và useStateimport React, { useState, useEffect } from"react";import axios from"axios"; //Sử dụng axios//Component hiển thị danh sách người dùngconstShowUser= (props) => {//Lấy giá tri của props listUserconst { listUser } = props;// Render ra list user// React.Fragment cho phép bọc JSX lại.// List Keys : chỉ định key, giúp loại bỏ cảnh báo.return ( <div> {listUser.map((user, index) => {return ( <React.Fragmentkey={user.id}> <ul> <li>{user.name}</li> <li>{user.email}</li> </ul> <hr /> </React.Fragment> ); })} </div> );};exportdefaultfunctionApp(props) {//Khai báo state, sử dụng hook: useStateconst [listUser,setListUser] =useState([]);//Sử dụng useEffect hook như componentDidMountuseEffect(() => {constgetUserAPI='https://5df8a4c6e9f79e0014b6a587.mockapi.io/freetuts/users'//Gọi API bằng axiosaxios.get(getUserAPI).then((res) => {// Cập nhật lại listUser bằng// Bạn có thể xem lại bài viết về useState()setListUser(res.data); }).catch((err) => {//Trường hợp xảy ra lỗiconsole.log(err);alert("Xảy ra lỗi"); }) }, [])return ( <> <code>freetuts.net</code> <br /> <ShowUserlistUser={listUser} /> </> );}
Để sử dụng componentDidUpdate trong functional component chúng ta sẽ chỉ định giả trị của tham số arrayDependencies là null.
Lifecycle thứ 3 mà chúng ta có thể sử dụng được với useEffect là componentUnWillMount, lifecycle này được khởi chạy khi mỗi khi component chuẩn bị được xóa khỏi tree dom. Để sử dụng nó bằng useEffect chúng ta chỉ cần return về 1 function trong effectFunction, function được return đó sẽ đóng vai trò như là componentUnWillMount. Cùng xem xét ví dụ bên duới:
src\App.jsx
import React, { useState, useEffect } from'react';import axios from"axios";functionLifecycleDemo() {useEffect(() => {//Được gọi khi component renderconsole.log('render!');// useEffect trả về một hàm ,// hàm trả về đó là đóng vai trò như// là componentWillUnmountreturn () =>console.log('unmounting...'); })return (<code>freetuts.net</code>);}functionApp() {const [mounted,setMounted] =useState(true);consttoggle= () =>setMounted(!mounted);return ( <> {mounted && <LifecycleDemo />} <hr /> <buttononClick={toggle}>Show/Hide LifecycleDemo</button> </> )}exportdefault App;