在 React 应用中,我们经常需要在组件之间共享状态和数据。而 React 的 createContext 和 Provider 就是为了解决这个问题而诞生的。

createContext:创建自定义上下文

首先,让我们来看看 createContext。这个函数接受一个初始值作为参数,并返回一个新的 Context 对象,我们可以将其称为自定义上下文。这个上下文将作为数据的传递媒介,让我们不再需要通过一层层的 props 来传递数据。

让我们先来看一个简单的例子:

// 创建一个自定义上下文
const MyContext = React.createContext('defaultValue');

在这个例子中,我们创建了一个名为 MyContext 的自定义上下文,并给定了一个默认值 'defaultValue'。

Provider:提供数据给后代组件

接下来,我们需要一个 Provider 组件来将数据传递给后代组件。这个组件接受一个 value 属性,用于传递上下文的值给后代组件。当 Provider 的 value 发生变化时,所有依赖于这个上下文的后代组件都会重新渲染。

function App() {
const [theme, setTheme] = useState('dark'); return (
// 使用 Provider 提供上下文的值
<MyContext.Provider value={theme}>
{/* 后代组件 */}
<Toolbar />
</MyContext.Provider>
);
}

在这个例子中,App 组件作为 MyContext.Provider,提供了 theme 的值给所有的后代组件。这使得后代组件可以方便地获取这个 theme 的值。

useContext:在子组件中获取上下文的值

最后,让我们来看看如何在子组件中获取上下文的值。我们可以使用 useContext 这个钩子来获取 MyContext 的值,并在子组件中使用它。

function Toolbar() {
const theme = useContext(MyContext); return (
<div style={{ background: theme === 'light' ? '#fff' : '#000' }}>
{/* 渲染其他内容 */}
</div>
);
}

在这个例子中,Toolbar 组件使用了 useContext 钩子来获取 MyContext 的值,并根据这个值来决定渲染的背景颜色。

总结

通过 createContext 和 Provider,我们可以轻松地在 React 应用中共享状态和数据,而不再需要手动通过一层层的 props 来传递数据。这种方式使得组件的设计更加清晰,代码更加简洁,提高了应用的可维护性和可扩展性。

🌟 简单理解 React 的 createContext 和 Provider 🚀的更多相关文章

  1. 简单整理React的Context API

    之前做项目时经常会遇到某个组件需要传递方法或者数据到其内部的某个子组件,中间跨越了甚至三四层组件,必须层层传递,一不小心哪层组件忘记传递下去了就不行.然而我们的项目其实并没有那么复杂,所以也没有使用r ...

  2. 理解 React,但不理解 Redux,该如何通俗易懂的理解 Redux?

    作者:Wang Namelos链接:https://www.zhihu.com/question/41312576/answer/90782136来源:知乎著作权归作者所有.商业转载请联系作者获得授权 ...

  3. 理解 React,但不理解 Redux,该如何通俗易懂的理解 Redux?(转)

    作者:Wang Namelos 链接:https://www.zhihu.com/question/41312576/answer/90782136来源:知乎 解答这个问题并不困难:唯一的要求是你熟悉 ...

  4. 简单理解ECMAScript2015中的箭头函数新特性

    箭头函数(Arrow functions),是ECMAScript2015中新加的特性,它的产生,主要有以下两个原因:一是使得函数表达式(匿名函数)有更简洁的语法,二是它拥有词法作用域的this值,也 ...

  5. 深入理解React(二) —— 数据流和事件原理

    版权声明:本文由左明原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/158 来源:腾云阁 https://www.qclou ...

  6. 深入理解React、Redux

    深入理解React.ReduReact+Redux非常精炼,良好运用将发挥出极强劲的生产力.但最大的挑战来自于函数式编程(FP)范式.在工程化过程中,架构(顶层)设计将是一个巨大的挑战.要不然做出来的 ...

  7. 理解 React Hooks 心智模型:必须按顺序、不能在条件语句中调用的规则

    前言 自从 React 推出 hooks 的 API 后,相信大家对新 API 都很喜欢,但是它对你如何使用它会有一些奇怪的限制.比如,React 官网介绍了 Hooks 的这样一个限制: 不要在循环 ...

  8. git的简单理解及基础操作命令

    前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...

  9. 简单理解Struts2中拦截器与过滤器的区别及执行顺序

    简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

  10. [转]简单理解Socket

    简单理解Socket 转自 http://www.cnblogs.com/dolphinX/p/3460545.html  题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公 ...

随机推荐

  1. bilibili 实时平台的架构与实践

    摘要:本文由 bilibili 大数据实时平台负责人郑志升分享,基于对 bilibili 实时计算的痛点分析,详细介绍了 bilibili Saber 实时计算平台架构与实践.本次分享主要围绕以下四个 ...

  2. KubeNode:阿里巴巴云原生 容器基础设施运维实践

    简介: 目前 KubeNode 已经覆盖了阿里巴巴集团的所有的 ASI 集群,接下来,将随着阿里巴巴集团"统一资源池"的项目,推进 KubeNode 覆盖更大的范围.更多的场景,让 ...

  3. 走完线上 BUG 定位最后一公里

    简介: 因为线上线下环境隔离的问题,线上的输入很多时候难以在日常环境中构造,定位 bug 效率低下.是否有简单快捷的办法呢? 一个小故事 周末12点的闹钟在回龙观均价3000的出租屋急促的响起,程序员 ...

  4. Scheduled SQL: SLS 大规模日志上的全局分析与调度

    简介: 本文总结了大规模日志全局分析的需求,讨论SLS上现有的典型分析方案,并延伸到 SLS 原生数据处理方案,介绍 Schedueld SQL 功能与最佳实践. 大规模日志全局分析的需求 数据大规模 ...

  5. 如何玩转 WebGL 并行计算

    ​简介: 如今在 Web 端使用 WebGL 进行高性能计算已有不少实践,例如在端智能领域中的 tensorflow.js,再比如可视化领域中的 Stardust.js. ​ 作者 | 沧东 来源 | ...

  6. IIncrementalGenerator 获取引用程序集的所有类型

    本文告诉大家如何在使用 IIncrementalGenerator 进行增量的 Source Generator 生成代码时,如何获取到当前正在分析的程序集所引用的所有的程序集,以及引用的程序集里面的 ...

  7. CF1800F Dasha and Nightmares

    F.Dasha and Nightmares 题意:\(n\) 个字符串 \(s_i\),问有多少对不同的 \((i, j) \ (1 \le i \le j \le n)\),使得 \(s_i\) ...

  8. ubuntu_24.04 Noble LTS安装docker desktop启动无窗口及引擎启动失败的解决方法

    ubuntu_24.04 LTS安装docker desktop启动无窗口及引擎启动失败的解决方法 1. 安装docker desktop后启动无窗口 现象: 执行sudo apt install . ...

  9. Ubuntu安装完VMware tools还是不能和主机之间拖拽文件

    Ubuntu安装完VMware tools还是不能和主机之间拖拽文件 1.确保已安装了VMware Tools 2.禁用 Wayland sudo gedit /etc/gdm3/custom.con ...

  10. 检索增强生成RAG-书生浦语大模型实战营学习笔记3&大语言模型8

    大语言模型学习-8.检索增强生成RAG 书生浦语大模型实战营学习笔记3 本文主要涉及检索增强生成相关基础知识,也包括第二期实战营的第3课的内容 动机 当今大语言模型存在幻觉现象,即大模型会无意义或不忠 ...