Các React Hook tích hợp sẵn

Hook cho phép bạn sử dụng các tính năng khác nhau của React từ các component của bạn. Bạn có thể sử dụng các Hook tích hợp sẵn hoặc kết hợp chúng để xây dựng Hook của riêng bạn. Trang này liệt kê tất cả các Hook tích hợp sẵn trong React.


State Hooks

State cho phép một component “ghi nhớ” thông tin như đầu vào của người dùng. Ví dụ: một component form có thể sử dụng state để lưu trữ giá trị đầu vào, trong khi một component thư viện ảnh có thể sử dụng state để lưu trữ chỉ mục ảnh đã chọn.

Để thêm state vào một component, hãy sử dụng một trong các Hook sau:

  • useState khai báo một biến state mà bạn có thể cập nhật trực tiếp.
  • useReducer khai báo một biến state với logic cập nhật bên trong một hàm reducer.
function ImageGallery() {
const [index, setIndex] = useState(0);
// ...

Context Hooks

Context cho phép một component nhận thông tin từ các component cha ở xa mà không cần truyền nó dưới dạng props. Ví dụ: component cấp cao nhất của ứng dụng của bạn có thể truyền theme UI hiện tại cho tất cả các component bên dưới, bất kể độ sâu.

function Button() {
const theme = useContext(ThemeContext);
// ...

Ref Hooks

Refs cho phép một component giữ một số thông tin không được sử dụng để hiển thị, như một DOM node hoặc một ID timeout. Không giống như state, việc cập nhật một ref không làm component của bạn render lại. Refs là một “cửa thoát hiểm” khỏi mô hình React. Chúng hữu ích khi bạn cần làm việc với các hệ thống không phải React, chẳng hạn như các API trình duyệt tích hợp sẵn.

  • useRef khai báo một ref. Bạn có thể giữ bất kỳ giá trị nào trong đó, nhưng thường được sử dụng để giữ một DOM node.
  • useImperativeHandle cho phép bạn tùy chỉnh ref được hiển thị bởi component của bạn. Điều này hiếm khi được sử dụng.
function Form() {
const inputRef = useRef(null);
// ...

Effect Hooks

Effects cho phép một component kết nối và đồng bộ hóa với các hệ thống bên ngoài. Điều này bao gồm việc xử lý mạng, DOM của trình duyệt, hoạt ảnh, các widget được viết bằng một thư viện UI khác và các code không phải React khác.

  • useEffect kết nối một component với một hệ thống bên ngoài.
function ChatRoom({ roomId }) {
useEffect(() => {
const connection = createConnection(roomId);
connection.connect();
return () => connection.disconnect();
}, [roomId]);
// ...

Effects là một “cửa thoát hiểm” khỏi mô hình React. Không sử dụng Effects để điều phối luồng dữ liệu của ứng dụng của bạn. Nếu bạn không tương tác với một hệ thống bên ngoài, bạn có thể không cần Effect.

Có hai biến thể hiếm khi được sử dụng của useEffect với sự khác biệt về thời gian:

  • useLayoutEffect kích hoạt trước khi trình duyệt vẽ lại màn hình. Bạn có thể đo layout ở đây.
  • useInsertionEffect kích hoạt trước khi React thực hiện các thay đổi đối với DOM. Các thư viện có thể chèn CSS động ở đây.

Performance Hooks

Một cách phổ biến để tối ưu hóa hiệu suất render lại là bỏ qua các công việc không cần thiết. Ví dụ: bạn có thể yêu cầu React sử dụng lại một phép tính đã được lưu trong bộ nhớ cache hoặc bỏ qua việc render lại nếu dữ liệu không thay đổi kể từ lần render trước.

Để bỏ qua các phép tính và render lại không cần thiết, hãy sử dụng một trong các Hook sau:

  • useMemo cho phép bạn lưu vào bộ nhớ cache kết quả của một phép tính tốn kém.
  • useCallback cho phép bạn lưu vào bộ nhớ cache một định nghĩa hàm trước khi truyền nó xuống một component đã được tối ưu hóa.
function TodoList({ todos, tab, theme }) {
const visibleTodos = useMemo(() => filterTodos(todos, tab), [todos, tab]);
// ...
}

Đôi khi, bạn không thể bỏ qua việc render lại vì màn hình thực sự cần được cập nhật. Trong trường hợp đó, bạn có thể cải thiện hiệu suất bằng cách tách các cập nhật chặn phải đồng bộ (như nhập vào một input) khỏi các cập nhật không chặn không cần chặn giao diện người dùng (như cập nhật biểu đồ).

Để ưu tiên render, hãy sử dụng một trong các Hook sau:

  • useTransition cho phép bạn đánh dấu một chuyển đổi state là không chặn và cho phép các cập nhật khác làm gián đoạn nó.
  • useDeferredValue cho phép bạn trì hoãn việc cập nhật một phần không quan trọng của UI và cho phép các phần khác cập nhật trước.

Other Hooks

Các Hook này chủ yếu hữu ích cho các tác giả thư viện và không được sử dụng phổ biến trong code ứng dụng.

  • useDebugValue cho phép bạn tùy chỉnh nhãn mà React DevTools hiển thị cho Hook tùy chỉnh của bạn.
  • useId cho phép một component liên kết một ID duy nhất với chính nó. Thường được sử dụng với các API hỗ trợ tiếp cận.
  • useSyncExternalStore cho phép một component đăng ký một kho bên ngoài.
  • useActionState cho phép bạn quản lý trạng thái của các hành động.

Your own Hooks

Bạn cũng có thể xác định các Hook tùy chỉnh của riêng bạn dưới dạng các hàm JavaScript.