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

React组件通信——context(提供者/消费者)

Context 是 React 提供的一种组件间通信方式,主要用于解决跨层级组件 props 传递的问题。它允许数据在组件树中"跨级"传递,无需显式地通过每一层 props 向下传递。

一、Context 核心概念

1. 基本组成

  • React.createContext:创建 Context 对象

  • Context.Provider:提供数据的组件

  • Context.Consumer 或 useContext:消费数据的组件

2. 工作原理

二、示例

创建 Context 文件(独立模块)

// contexts/ThemeContext.js
import { createContext } from 'react';// 1. 创建Context并导出
const ThemeContext = createContext('light'); // 默认值// 2. 导出Provider组件
export const ThemeProvider = ThemeContext.Provider;// 3. 直接导出Context对象
export default ThemeContext;

提供者文件

// App.js
import React, { useState } from "react";
import { ThemeProvider } from "./contexts/ThemeContext";
import ThemedButton from "./ThemeButton";function App() {const [theme, setTheme] = useState("dark");return (<ThemeProvider value={theme}><ThemedButton /><button onClick={() => setTheme(theme === "dark" ? "light" : "dark")}>切换主题</button></ThemeProvider>);
}export default App;

消费者文件

// ThemedButton.js
import React, { useContext } from "react";
import ThemeContext from "./contexts/ThemeContext";function ThemedButton() {// 方式一:使用从Context文件导入的同一个Context对象const theme = useContext(ThemeContext);return (<div><buttonstyle={{background: theme === "dark" ? "#333" : "#EEE",color: theme === "dark" ? "white" : "black",}}>当前主题: {theme}</button>{/* 方式二:适用于class组件 */}<ThemeContext.Consumer>{(theme) => {return (<buttonstyle={{background: theme === "dark" ? "#333" : "#EEE",color: theme === "dark" ? "white" : "black",}}>当前主题: {theme}</button>);}}</ThemeContext.Consumer></div>);
}export default ThemedButton;
http://www.dtcms.com/a/250978.html

相关文章:

  • NVIDIA Isaac GR00T N1.5 人形机器人强化学习入门教程(四)Lerobot、宇树 G1 等不同形态机器人微调教程
  • 一个字节一定是8比特吗?如何查看二进制文件前几个字节?计算机存储单元bit?数据类型大小?
  • 函数指针与指针函数:本质区别与高级应用
  • YOLOv4 改进点详解
  • Spring Boot多数据源切换:三种实现方式详解与实战
  • 二.干货干货!!!SpringAI入门到实战-记忆存储和会话隔离
  • Adobe 发布 Android 版 Photoshop(目前免费测试)
  • 电阻篇---下拉电阻
  • 行列式的逆序数法定义 线性代数
  • 论文笔记 <交通灯> <多智能体>DERLight双重经验回放灯机制
  • Web server failed to start. Port XXX was already in use.
  • Nginx限速配置详解
  • CountDownLatch与CyclicBarrier的区别
  • AOP +ThreadLocal实现对接口监控
  • 共享内存实现进程通信
  • C++ STL常用二分查找算法
  • 第二十六周:序列化和反序列化
  • Jenkins 全面深入学习目录
  • MFE微前端:如何捕捉远程应用的remote.js加载失败的错误?
  • 001微信小程序入门
  • sql中like and not like的优化
  • Web后端基础:数据库
  • 【1】Redis 缓存穿透原理和解决方案
  • 操作系统核心名词解释--期末简答题快速复习
  • 【深度解析】Java高级并发模式与实践:从ThreadLocal到无锁编程,全面避坑指南!
  • Python 训练营打卡 Day 46-通道注意力
  • 电影院管理系统的设计与实现
  • VINS-Fusion 简介、安装、编译、数据集/相机实测
  • Linux系统编程 | IPC对象---共享内存
  • 算法的几大模块