React(10)React Context技术(2)


前言

承接上一篇关于React Context技术的文章。React Context技术在页面主题修改应用上提供了较好的方法,同时React还提供了ContextType技术,用于实现对Context技术进行简化书写。本篇文章对这两个概念进行讲解,最后再讲解Context默认值的使用方法。

在开始正式讲解之前, 再次强调React Context的功能:实现组件之间的数据传递。


一、案例:更改页面的主题

1、案例要求

页面中有两个超级链接,用于控制页面中内容的主题颜色。两个超级链接分别是“浅色主题”和“深色主题”。为了掩饰主题的更改,在页面中还设置了一个div容器,深浅色主题对应该div容器不同的背景颜色。div容器中有文本和一个命令按钮,深浅色主题也对应着文本的不同颜色和按钮的不同样式。案例的最终效果图如下所示。
在这里插入图片描述
在这里插入图片描述

2、案例分析

首先,我们要在所有组件以外预设好两个主题的参数。根据对效果图的观察,两个不同的主题主要对应的是背景颜色、文本颜色、按钮颜色三个组成部分。规划具体的主题参数如下所示。

背景颜色 文本颜色 按钮颜色样式
浅色模式 #dddddd #000000 .btn-primary
深色模式 #222222 #ffffff .btn-danger

在上述表中,为按钮颜色规划的是Bootstrap框架中的两种不同的按钮背景颜色类。如果不使用Bootstrap,也可以在CSS文件中独立书写这两个类,并为这两个类设置不同的外观。

按照上述表中的外观规划,定义一个themes的对象,包含两种主题样式,代码如下所示。

const themes={
   
  light:{
   
    className:'btn btn-primary',
    backgroundColor:'#ddd',
    color:'#000'
  },
  dark:{
   
    className:'btn btn-danger',
    backgroundColor:'#222',
    color:'#fff'
  }
};

3、案例组件划分

其次,我们来为这个案例进行组件划分。很显然,我们可以将其划分为两个组件:

  • 父组件<App />:实现改变主题的超级链接和整个案例的布局。
  • 子组件<Content />:实现案例下方的<div>容器和其内部的文本与按钮。

4、<App />组件的实现

在书写组件<App />时,要先创建Context对象,并解构出生产组件和消费组件。

const {
   Provider,Consumer} = React.createContext
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
ReactContext是一种在组件之间共享数据的方法。它通过创建一个context对象,其中包含一个Provider和Consumer组件来实现。 Provider组件用于提供共享的数据,而Consumer组件用于获取这些共享的数据。在Provider组件内部,可以通过value属性来传递数据。而在Consumer组件内部,通过函数的方式获取这些数据。 下面是一个使用Context的例子: connect函数接受一个mapState函数作为参数,该函数用于将context的值映射到组件的props中。 总结来说,ReactContext提供了一种在组件之间共享数据的方式,可以通过Provider组件提供数据,再通过Consumer组件获取数据。同时,通过封装Consumer组件的方式,可以简化使用过程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [React中的context](https://blog.csdn.net/sxm666666/article/details/115704805)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [Reactcontext上下文详解](https://blog.csdn.net/astonishqft/article/details/82868126)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小海前端

原创不易,量力支持,感谢打赏。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值