× Giới thiệu Lịch khai giảng Tin tức Sản phẩm học viên

React useContext Hook là gì, khám phá ngay

05/10/2022 01:33

Tìm hiểu về React useContext Hook, các ví dụ và cách thực hiện code đúng cho các dự án tiếp theo của mình bạn nhé!

Đầy đủ ví dụ

Thí dụ:

Đây là ví dụ đầy đủ sử dụng ReactContext:

import { useState, createContext, useContext } from "react";
import ReactDOM from "react-dom/client";

const UserContext = createContext();

function Component1() {
  const [user, setUser] = useState("Jesse Hall");

  return (
    <UserContext.Provider value={user}>
      <h1>{`Hello ${user}!`}</h1>
      <Component2 />
    </UserContext.Provider>
  );
}

function Component2() {
  return (
    <>
      <h1>Component 2</h1>
      <Component3 />
    </>
  );
}

function Component3() {
  return (
    <>
      <h1>Component 3</h1>
      <Component4 />
    </>
  );
}

function Component4() {
  return (
    <>
      <h1>Component 4</h1>
      <Component5 />
    </>
  );
}

function Component5() {
  const user = useContext(UserContext);

  return (
    <>
      <h1>Component 5</h1>
      <h2>{`Hello ${user} again!`}</h2>
    </>
  );
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<Component1 />);​

React useContext Hook là gì?

React Context là một cách để quản lý trạng thái trên toàn cầu.

Nó có thể được sử dụng cùng với useStateHook để chia sẻ trạng thái giữa các thành phần lồng vào nhau dễ dàng hơn so với useStatemột mình.

Trạng thái phải được giữ bởi thành phần mẹ cao nhất trong ngăn xếp yêu cầu quyền truy cập vào trạng thái.

Để minh họa, chúng ta có nhiều thành phần lồng nhau. Thành phần ở trên cùng và dưới cùng của ngăn xếp cần có quyền truy cập vào trạng thái.

Để thực hiện điều này mà không có Ngữ cảnh, chúng ta sẽ cần chuyển trạng thái dưới dạng "props" qua mỗi thành phần lồng nhau. Điều này được gọi là "kprop drilling".

Example:

Passing "props" through nested components:

import { useState } from "react";
import ReactDOM from "react-dom/client";

function Component1() {
  const [user, setUser] = useState("Jesse Hall");

  return (
    <>
      <h1>{`Hello ${user}!`}</h1>
      <Component2 user={user} />
    </>
  );
}

function Component2({ user }) {
  return (
    <>
      <h1>Component 2</h1>
      <Component3 user={user} />
    </>
  );
}

function Component3({ user }) {
  return (
    <>
      <h1>Component 3</h1>
      <Component4 user={user} />
    </>
  );
}

function Component4({ user }) {
  return (
    <>
      <h1>Component 4</h1>
      <Component5 user={user} />
    </>
  );
}

function Component5({ user }) {
  return (
    <>
      <h1>Component 5</h1>
      <h2>{`Hello ${user} again!`}</h2>
    </>
  );
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<Component1 />);

Giải pháp

Giải pháp là tạo bối cảnh.

Tạo bối cảnh

Để tạo ngữ cảnh, bạn phải Nhập createContextvà khởi tạo nó:

import { useState, createContext } from "react";
import ReactDOM from "react-dom/client";

const UserContext = createContext()

Tiếp theo, chúng ta sẽ sử dụng Trình cung cấp ngữ cảnh để bao bọc cây các thành phần cần có trạng thái Ngữ cảnh.

Context Provider

function Component1() {
  const [user, setUser] = useState("Jesse Hall");

  return (
    <UserContext.Provider value={user}>
      <h1>{`Hello ${user}!`}</h1>
      <Component2 user={user} />
    </UserContext.Provider>
  );
}

Bây giờ, tất cả các thành phần trong cây này sẽ có quyền truy cập vào Ngữ cảnh của người dùng.

Sử dụng useContext

Để sử dụng Context trong một thành phần con, chúng ta cần truy cập nó bằng cách sử dụng useContextHook.

Đầu tiên, hãy đưa useContextvào câu lệnh nhập:

import { useState, createContext, useContext } from "react";

Sau đó, bạn có thể truy cập Ngữ cảnh người dùng trong tất cả các thành phần:

function Component5() {
  const user = useContext(UserContext);

  return (
    <>
      <h1>Component 5</h1>
      <h2>{`Hello ${user} again!`}</h2>
    </>
  );
}