当前位置: 首页 > article >正文

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。


http://www.kler.cn/a/444491.html

相关文章:

  • MySQL数据库——门诊管理系统数据库数据表
  • Linux 文件系统目录结构及其简要介绍
  • 【JavaEE进阶】关于Maven
  • 【读书笔记】《论语别裁》学而有何乐
  • OpenCV 学习记录:首篇
  • 源码分析之Openlayers中MousePosition鼠标位置控件
  • ASP.NET Core+EF Core+Vue.js/Ant Design/Axios 实现简单的图书查询
  • 浅谈OA和门户网站的区别
  • 语言模型 F5-E2 TTS:音色 情绪一键克隆,轻松实现多角色对话
  • 二分法(总体概述)
  • Linux下部署MySQL8.0集群 - 主从复制(一主两从)
  • 前后端跨域问题(CROS)
  • shell命令查看在用端口
  • 【图像分类实用脚本】数据可视化以及高数量类别截断
  • Unity 在不同分辨率的屏幕设备中保持特定的纵横比
  • 性能测试度量指标学习笔记
  • Python GUI 编程:tkinter 初学者入门指南——Ttk 组合框 Combobox
  • 课上测试:商用密码接口实现
  • nbcio-vue版本现在安装编译问题的处理方式
  • 工业一体机如何助力汽车零部件制造实现精准控制
  • 数据可视化-1. 折线图
  • Unity开发哪里下载安卓Android-NDK-r21d
  • JAVA集合-LIST 及源码解析
  • 【JAVA】Java项目实战—分布式微服务项目:分布式消息队列
  • Scala项目(一)
  • 3D和AR技术在电商行业的应用有哪些?