React - Context的简单使用

2023-05-16

Context 通过组件树提供了一个传递数据的方法,从而避免了在每一个层级手动的传递 props 属性。

在一个典型的 React 应用中,数据是通过 props 属性由上向下(由父及子)的进行传递的,但这对于某些类型的属性而言是极其繁琐的(例如:地区偏好,UI主题),这是应用程序中许多组件都所需要的。 Context 提供了一种在组件之间共享此类值的方式,而不必通过组件树的每个层级显式地传递 props 。

举个栗子:

点击切换语言,下面俩个button会将英文转换成中文或者中文转换成英文。

我看如何实现的。

const cnText = {
  submit: '确认',
  cancel: '取消'
}
const enText = {
  submit: 'submit',
  cancel: 'cancel'
}

const LocaleContext = React.createContext(cnText);//创建一个Context 参数是默认值
class ChangeButton extends React.Component{
      constructor (props) {
          super(props);
          this.state = {
            locale: cnText
          }
      }
      handle = () => {
          const locale = this.state.locale === enText ? cnText : enText;
          this.setState({
            locale
          })
      }
      render () {
        return (// value 里面为传个子组件的数据
        <LocaleContext.Provider value = { this.state.locale } >
            <button  onClick = { this.handle } >切换语言</button>
            <App />
        </LocaleContext.Provider>
        );
      }
}
class App extends React.Component {
  constructor (props) {
      super(props);
      this.state = enText;

    }
    render  () {
       return (
          <LocaleContext.Consumer >
              { locale => (//locale 接受传过来的值,然后通过函数子组件渲染
                <div>
                    <button> { locale.submit } </button>
                    <button> { locale.cancel } </button>
                </div>
              )}
          </LocaleContext.Consumer>
       );
     }
}
ReactDOM.render(
  <ChangeButton ></ChangeButton>,
  document.getElementById('root')
)

当父组件的状态改变时,也就是通过handle函数,子组件会自动调用render重新渲染,不需要我们设置监听函数。

Context

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React - Context的简单使用 的相关文章

  • ESP32设备驱动-Si4703调频收音机模块驱动

    Si4703调频收音机模块驱动 文章目录 Si4703调频收音机模块驱动 1 Si4703介绍 2 硬件准备 3 软件准备 4 驱动实现 1 Si4703介绍 Si4702 03 FM 无线电接收器系列通过小尺寸和电路板面积 最少的组件数量
  • ESP32设备驱动-PCA9685 LED控制器驱动

    PCA9685 LED控制器驱动 文章目录 PCA9685 LED控制器驱动 1 PCA9685介绍 2 硬件准备 3 软件准备 4 驱动实现 1 PCA9685介绍 PCA9685 是一款 I C 总线控制的 16 通道 LED 控制器
  • 飞桨EasyDL闪退解决方法

    当点击训练时 xff0c 软件消失 xff0c 用cmd运行软件查看输出信息未见异常 解决办法 xff0c 换一台电脑安装 xff0c 很大概率就好了
  • WM_QUIT,WM_CLOSE区别[转]

    总结 我们要使用代码关闭程序的话 应该向窗口发送WM CLOSE或者直接调DestroyWindow HWND 函数 默认情况下WM CLOSE的消息响应就是调用DestroyWindow HWND 函数 所以我们直接调用也达到一样的效果
  • ESP32设备驱动-LIS3DSH加速度传感器驱动

    LIS3DSH加速度传感器驱动 文章目录 LIS3DSH加速度传感器驱动 1 LIS3DH介绍 2 硬件准备 3 软件准备 4 驱动实现 1 LIS3DH介绍 LIS3DSH 是一款超低功耗高性能三轴线性加速度计 属于 纳米 系列 具有嵌入
  • 66老师推荐书单

    应用词汇 四级 星火英语 新要求大学英语词汇星火式巧记速记 精华本 附MP3 光盘1 张 http product dangdang com 23315816 html 词典 柯林斯COBUILD 高阶英语学习词典 英语版 http pro
  • NetAssist 网络助手

    电脑上的网络助手找不到了 xff0c 百度搜各种不能用的和下载要积分啊什么的 xff0c 真是现在鸟大了什么林子都有 xff0c 人家开发者都还免费提供软件的使用 xff0c 你一个使用者居然还拿别人的东西赚积分 xff0c 真TM恶心 x
  • 64位的linux装的hadoop是32位的,需要手工编译

    64位的linux装的hadoop是32位的 coco by coco 2014 07 02 64位的linux装的hadoop是32位的 xff0c 需要手工编译 遇到的问题描述 xff1a root 64 db96 hadoop had
  • Unable to preventDefault inside passive event listener due to target being treated as passive.

    最近做项目经常在 chrome 的控制台看到如下提示 xff1a Unable to preventDefault inside passive event listener due to target being treated span
  • GBK 编码

    GBK编码范围 xff1a 8140 xff0d FEFE xff0c 汉字编码范围见第二节 xff1a 码位分配及顺序 GBK编码 xff0c 是对GB2312编码的扩展 xff0c 因此完全兼容GB2312 80标准 GBK编码依然采用
  • 子类能否重写父类的静态方法?

    今天在看到了一道面试题 xff0c 题目是一道代码阅读题 xff0c 问下面的代码输出结果是什么 xff1f 我最开始的理解 xff1a 上面的代码我们可以看到 xff0c 上面的类中有两个内部类Sub和Super xff0c Sub继承了
  • docker build命令详解

    docker build命令用于根据给定的Dockerfile和上下文以构建Docker镜像 docker build命令的使用格式 xff1a docker build span class token punctuation span
  • Blazor 从入门到放弃

    Blazor 从入门到放弃 Intro Blazor 是微软在 NET 里推出的一个 WEB 客户端 UI 交互的框架 xff0c 使用 Blazor 你可以代替 JavaScript 来实现自己的页面交互逻辑 xff0c 可以很大程度上进
  • WPF知识学习

    RelativeSource 61 RelativeSource AncestorType 61 x Type Window 是一种 WPF XAML 绑定方式 xff0c 它表示要从当前控件的父级元素中找到类型为 Window 的元素 x
  • STM32H7并行读取AD7606数据以及片内AD值不准解决办法

    一 硬件 先了解一下AD7606 xff0c 16位 xff0c 单电源 xff0c 200k采样率 xff0c 8路 xff0c 除了贵没有其他缺点 xff0c 数据相当的稳 xff0c 一个5V供电 xff0c 不用运放的情况下采集电压
  • C#表达式树解析步骤

    C 表达式树是一种将 C 代码表示为对象树的方式 xff0c 它提供了一种在运行时动态构建和执行代码的能力 表达式树可以用于构建 LINQ 查询 动态生成代码 ORM 框架等场景 表达式树的解析过程可以分为两个步骤 xff1a 构建表达式树
  • FluentValidation使用示例

    FluentValidation 是一个 NET 平台下的验证库 xff0c 用于验证对象的属性是否符合预期的规则 它提供了一种简洁的方式来编写验证规则 xff0c 支持链式编程 xff0c 可以轻松地构建复杂的验证逻辑 在 NET 6 中
  • 超简单BeautifulSoup版Csdn博客(摘要视图)爬虫

    csdnSpider py代码 import bs4 import requests origin 61 span class hljs string 39 http blog csdn net 39 span user agent 61
  • C#版本和.NET版本以及VS版本的对应关系

    之所以在这里分享这个对应关系 xff0c 是因为在C 基础知识系列的文章发布之后 xff0c 有些初学者对 NET版本和C 语言特性之间的对应关系有点不清楚 xff0c 有时候会弄混淆了 并且通过这个对应关系 xff0c 也可以帮助大家对C
  • SQLServer创建索引的5种方法

    前期准备 xff1a span class hljs operator span class hljs keyword create span span class hljs keyword table span Employee ID s

随机推荐

  • 正则 ?= 用法

    文本 xff1a span class hljs tag lt span class hljs title br span gt span 您好 xff0c 非常好 xff0c 很开心认识你 span class hljs tag lt s
  • 正则表达式(匹配第一个花括号)

    学习正则 xff0c 工作中使用正则让我对 有了新的认知 xff1a 正则中 匹配输入字符串的开始位置 xff0c 除非在 方括号表达式中使用 xff0c 此时表示不接受该字符集合 废话不多说 xff0c 直接看栗子吧 xff0c 如下图所
  • windows驱动注册中断服务程序

    一个驱动程序的标准中断服务例程的必要功能和建立一个ISR的需求 1 1 ISR需求 一个产生中断的物理设备的所有驱动程序必须有一个ISR 中断服务例程由内核定义如下 xff1a span class hljs built in BOOLEA
  • Android Studio 出现“Cannot resolve symbol” 解决办法

    一 Android Studio 无法识别同一个 package 里的其他类 xff0c 将其显示为红色 xff0c 但是 compile 没有问题 鼠标放上去后显示 Cannot resolve symbol XXX xff0c 重启 A
  • input[type=file] 获取上传文件的内容

    上代码 xff1a span class token tag span class token tag span class token punctuation lt span input span span class token att
  • 使用JLink烧写(HEX)程序

    JLink安装位置默认都是C Program Files SEGGER JLink 找到JFlash exe并运行 xff0c 打开要下载的HEX文件 连接好JLink调试线 选择设备 选择下载方式 显示基本信息 选择 提示连接成功 点击编
  • 用inception-v3模型,训练最后一层,打造自己的模型

    网上关于这个的博文很多 xff0c 作为一个新手想要弄明白并且实现 xff0c 还需要折腾一番 以下是我的实现过程 xff0c 希望对像我一样的新手有帮助 xff01 步骤 xff1a 1 下载google的inception v3模型 x
  • Notepad++使用教程

    Notepad 43 43 使用教程 2011年 2 月 26 日 发表评论 阅读评论 Notepad 43 43 是闪电博客推荐程序员必用的一款适合编程的 文本编辑 软件 xff0c 本文主要介绍 Notepad 43 43 的特点和使用
  • 构建maven工程指定父工程时parent标签出错

    父类的maven依赖 子类中的maven依赖 一定要谨慎的看一下子类和父类中的groupId一定要相同
  • 树莓派配置网络出现的各种问题和解决思路

    我们拿到树莓派的时候 xff0c 肯定是要树莓派上网的 xff0c 无论是有线还是无线 首先需要将树莓派连接上网 xff0c ifconfig 可以查看 ip 地址 xff08 不是 ifconfig xff09 1 配置网络容易遇到的问题
  • 树莓派远程连接的四种方式(最全)

    准备前提 xff1a 首先用 ifconfig 查看树莓派的 IP 地址 xff0c 记录下来 推荐通过固定 IP 的方法把树莓派的 IP 地址确定下来 xff0c 防止以后再次连接时候 IP 地址的变动导致每次都需要重新查看 IP 地址
  • 驼峰命名法(CamelCase)和下划线命名法(UnderScoreCase)

    骆驼式命名法就是当变量名或函数名是由一个或多个单词连结在一起 xff0c 而构成的唯一识别字时 xff0c 第一个单词以小写字母开始 xff1b 从第二个单词开始以后的每个单词的首字母都采用大写字母 xff0c 例如 xff1a myFir
  • 【STM32F10x】二:利用结构体访问外设

    之前了解使用寄存器操作GPIOA口的LED灯亮灭程序 xff0c 原理是将寄存器的地址强制转换成指针形式 xff0c 然后对指针进行操作 这一章尝试通过将外设定义成结构体的形式来操作外设寄存器 本章重点在于理解和使用 lt 结构体 gt 来
  • TortoiseGit 解决冲突(万能方法)

    思路 xff1a 别人提交了代码 xff0c 你改了代码 xff0c 此时 xff0c 如果不更新或者直接提交都会造成冲突 xff0c 所以最好是在不跟新的情况下 xff0c 把冲突解决掉 xff0c 然后提交代码 xff01 1 右键 t
  • 求正整数n所有可能的和式的组合

    求正整数n所有可能的和式的组合 xff08 如 xff1b 4 61 1 43 1 43 1 43 1 1 43 1 43 2 1 43 3 2 43 1 43 1 2 43 2 xff09 首先说一下 xff0c 群里面很多人在问这个东东
  • 根据PCB扫描图反推原理图

    工具 相机 xff08 拍摄电路板正反面 xff0c 记录元器件位置 xff09 扫描仪 xff08 扫描拆掉元器件的电路板 xff0c 作为底图用于对照着绘制PCB xff09 Photoshop xff08 处理扫描出的图片 xff09
  • 链路聚合原理与配置

    文章目录 一 链路聚合简介链路聚合实现条件 二 链路聚合配置三 总结 一 链路聚合简介 链路聚合 xff1a 指将多个物理端口汇聚在一起 xff0c 形成一个逻辑端口 xff0c 以实现出 入流量吞吐量在各成员端口的负荷分担 xff0c 交
  • 防火墙命令

    防火墙命令 https blog csdn net calm programmer article details 124194093 1 查看防火墙的状态 dead代表关闭 running代表已经开启 systemctl status f
  • 国科大机器人作业四:基于线性的扩展卡尔曼滤波器的机器人定位(实验部分)

    文章目录 练习4 xff1a 基于线性的扩展卡尔曼滤波器的机器人定位1 Introduction2 Kalman Filter Localization2 1 状态预测 State Prediction2 2 状态更新 xff1a Stat
  • React - Context的简单使用

    Context 通过组件树提供了一个传递数据的方法 xff0c 从而避免了在每一个层级手动的传递 props 属性 在一个典型的 React 应用中 xff0c 数据是通过 props 属性由上向下 xff08 由父及子 xff09 的进行