useContext Hook 的使用及规范

首先 useContext 是什么?


useContext 是 React 提供的一个 Hook,允许函数组件订阅 React 的 Context。

有什么用?


它使得你可以在不使用 Consumer 组件的情况下访问 Context 的值。通过 useContext,你可以轻松地在多层级组件之间传递数据,避免了手动传递 props(即所谓的 prop drilling)。

怎么用?


React 的 Context API 主要用于全局状态管理,例如主题、用户认证状态或语言设置等。它由以下几个部分组成:

  • createContext:创建一个 Context 对象。
  • Provider:提供者组件,用于将上下文值传递给其子树中的所有组件。
  • useContext:Hook,用于在函数组件中订阅 Context,并获取当前的 Context 值。
  • Consumer:组件,用于在类组件或函数组件中订阅 Context(虽然现在更推荐使用 useContext)。

具体使用和规范


文件及文件夹

在这里插入图片描述

1、创建一个 Context 对象

src\pages\useContextHook\context.tsx

import { createContext, Dispatch, SetStateAction } from "react";

// 定义 Context 的类型
interface MyContextType {
  value: string;
  setValue: Dispatch<SetStateAction<string>>;
}

// 创建 Context 对象,并提供默认值(可选)
const MyContext = createContext<MyContextType>({
  value: "value",
  setValue: () => {},
});

export default MyContext;

2、提供者组件,用于将上下文值传递给其子树中的所有组件

src\pages\useContextHook\index.tsx

import React, { useState } from "react";
import MyContext from "./context";
import DateModule from "./component/DataModule"; // 子组件

const UseContextHook = () => {

  const [value, setValue] = useState("Default Value");

  return (
    <>
      <MyContext.Provider value={{ value, setValue }}>
        <div>UseContextHook</div>
        <DateModule></DateModule>
      </MyContext.Provider>
    </>
  );
};

export default UseContextHook
3、使用或修改 useContext

src\pages\useContextHook\component\DataModule.tsx

import React, { useContext } from "react";
import MyContext from "../context";
import { Button } from "antd";

const DateModule = () => {

  const { value, setValue } = useContext(MyContext);

  return (
    <>
      <p>{value}</p>
      <Button onClick={() => {setValue('new Value')}}>按钮</Button>
    </>
  );
};

export default DateModule;

总之 useContext 是一个强大的工具,适用于多层级组件之间的通信。通过 Provider 组件和 useContext 钩子,你可以轻松地在组件树中传递状态和函数,避免 prop drilling。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值