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

Làm quen với React Hook

0 0 9

Người đăng: Le Van Giang

Theo Viblo Asia

Xin chào tất cả các bạn, bài viết này mình xin trình bày một chút kiến thức kiến thức cơ bản React Hook mà mình tìm hiểu được, rất mong được sự theo dõi của mọi người.

1) React hook là gì?

  • Hooks là một bổ sung mới trong React 16.8.

  • Hooks là những hàm cho phép bạn “kết nối” React state và lifecycle vào các components sử dụng hàm.

  • Với Hooks bạn có thể sử dụng state và lifecycles mà không cần dùng ES6 Class.

2) Tại sao chúng ta cần React Hooks?

  • Sau một thời gian làm việc với React thì có lẽ chúng ta sẽ bắt gặp một trong số các vấn đề sau:

    • “Wrapper hell” các component được lồng (nested) vào nhau nhiều tạo ra một DOM tree phức tạp.

    • Component quá lớn.

    • Sự rắc rối của Lifecycles trong class

  • React Hooks được sinh ra với mong muốn giải quyết những vấn đề này.

3) Lợi ích của hook

  • Khiến các component trở nên gọn nhẹ hơn

  • Giảm đáng kể số lượng code, dễ tiếp cận

  • Cho phép chúng ta sử dụng state ngay trong function component

4) Sử dụng hook

  • Ví dụ
import { useState } from 'react' function Counter() { const [count, setCount] = useState(0); // Ta có useState là một Hook. Hàm useState nhận tham số initial state // sau đó sẽ trả về một mảng 2 phần tử: // phần tử đầu tiên là state hiện tại // thứ 2 là hàm để update state - (hàm thứ hai này giống với setState khi chúng sử dụng dạng Class) return ( <div> <p>You clicked {count} times</p> <button onClick={() => setCount(count + 1)}>Click me</button> </div> )
}
  • useEffect - hook này có tác dụng tương tự như componentDidMount, componentDidUpdate, và componentWillUnmount trong React Class nhưng điều thú vị nó chỉ có một hàm duy nhất

  • Ví dụ

import { useState, useEffect } from 'react'; function Counter() { const [count, setCount] = useState(0); useEffect(() => { document.title = `You clicked ${count} times`; }, [title]); return ( <div> <p>You clicked {count} times</p> <button onClick={() => setCount(count + 1)}> Click me </button> </div> );
}
  • Effect này được khai báo ngay bên trong component và có quyền truy cập được các state và props. Mặc định, effect sẽ được gọi sau mỗi lần render DOM bao gồm cả lần đầu tiên.

  • useEffect nhận 2 parameter, đầu tiên là một function nơi chúng ta xử lý các side effect, thứ hai là một array [title]. Chúng ta có thể hiểu array này là nơi chứa những variable(biến) (không nhất thiết là state), mà khi những variable này thay đổi thì hook useEffect này sẽ được kích hoạt.

  • Khi chúng ta không bỏ array này vào hook useEffect thì nó sẽ chạy cùng với mọi lần component chạy function render

useEffect(() => { document.title = `You clicked ${count} times`; });
  • Còn nếu như chúng ta chỉ muốn nó chạy 1 lần sau lần render đầu tiên thì chúng ta chỉ cần truyền vào tham số thứ hai của useEffect là một mảng rỗng:
useEffect(() => { document.title = `You clicked ${count} times`;
}, [])
  • Effect hook có thể trả về một hàm, và hàm này sẽ được gọi để thực hiện các tác vụ dọn dẹp, tương tự như componentWillUnmount()
useEffect(() => { const id = setInteval(() => setCount(count + 1), 100) // Trả về một hàm để xóa inteval return () => clearInteval(id)
})
  • Ngoài ra còn vài cái Hooks khác như:

    • useContext
    • useReducer
    • useCallback
    • useMemo
    • useRef ...
  • Bạn có thể tìm chúng ở trang chủ của ReactJS tại đây

5) Rules of Hooks

  • Một số lưu ý khi làm việc với hook

    • Trong cùng một component, bạn có thể sử dụng bao nhiêu useState và useEffect tùy ý nhưng các hook này phải gọi ở trên cùng của function, không được nằm trong vòng lặp, khu vực điều kiện, hay các function con

    • Nó chỉ sử dụng trong functional component

    • Khi sử dụng useEffect để lấy dữ liệu, cần kiểm tra dữ liệu đã tồn tại hay chưa. Nếu không thì hàm sẽ gửi request liên tục

Tổng kết

  • Hi vọng bài viết này đã đem lại cho bạn cái nhìn tổng quan về React Hooks
  • Cám ơn mọi người dã theo dõi.

Tài liệu tham khảo

Bình luận

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

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

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 525

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

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 396

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

Đặt tên commit message sao cho "tình nghĩa anh em chắc chắn bền lâu"????

. Lời mở đầu. .

1 1 737

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

Tìm hiểu về Resource Controller trong Laravel

Giới thiệu. Trong laravel, việc sử dụng các route post, get, group để gọi đến 1 action của Controller đã là quá quen đối với các bạn sử dụng framework này.

0 0 358

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

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 449

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

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 433