React Context(上下文)

1 Context 

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

有部分小伙伴应该使用props属性进行组件上下传值的操作。当多个组件嵌套的时候,就需要慢慢向上寻找最初的值是什么。

2 API

React.createContext:

创建一个上下文的容器(组件),defaultValue可以设置共享的默认数据。

const {Provider, Consumer} = React.createContext(defaultValue);

Provider(生产者):

用于生产共享数据的地方,生产什么呢?就要看value定义的是什么了。

value:放置要共享的数据。

<Provider value={/*共享的数据*/}>/*里面可以渲染对应的内容*/
</Provider>

Consumer(消费者):

用于取生产者共享的数据。Cunsumer需要嵌套在生产者下面。才能通过回调的方式拿到共享的数据源。当然也可以单独使用,那就只能消费到上文提到的defaultValue。

<Consumer>{value => /*根据上下文  进行渲染相应内容*/}
</Consumer>

3 Demo

代码的效果图:

1 App.js 父组件:

//App.js
import React from 'react';
import Son from './son';//引入子组件
// 创建一个 theme Context,
export const {Provider,Consumer} = React.createContext("默认名称");
export default class App extends React.Component {render() {let name ="小人头"return (//Provider共享容器 接收一个name属性<Provider value={name}><div style={{border:'1px solid red',width:'30%',margin:'50px auto',textAlign:'center'}}><p>父组件定义的值:{name}</p><Son /></div></Provider>);}
}

son.js 子组件:

//son.js 子类
import React from 'react';
import { Consumer } from "./App.js";//引入父组件的Consumer容器
import Grandson from "./grandson.js";//引入子组件
function Son(props) {return (//Consumer容器,可以拿到上文传递下来的name属性,并可以展示对应的值<Consumer>{( name ) =><div style={{ border: '1px solid blue', width: '60%', margin: '20px auto', textAlign: 'center' }}><p>子组件。获取父组件的值:{name}</p>{/* 孙组件内容 */}<Grandson /></div>}</Consumer>);
}
export default Son;

grandson.js 孙子组件:

//grandson.js 孙类
import React from 'react';
import { Consumer } from "./App.js";//引入父组件的Consumer容器
function Grandson(props) {return (//Consumer容器,可以拿到上文传递下来的name属性,并可以展示对应的值<Consumer>{(name ) =><div style={{border:'1px solid green',width:'60%',margin:'50px auto',textAlign:'center'}}><p>孙组件。获取传递下来的值:{name}</p></div>}</Consumer>);
}
export default Grandson;

官方链接:Context – React

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/6981.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter之Beanshell解析并提取json响应

1&#xff1a;前置条件 将fastjson-1.2.49.jar包置于jmeter的lib目录下&#xff0c;并将该jar包添加到测试计划的Library中&#xff1b;否则会报&#xff1a;Typed variable declaration : Class: JSONObject not found in namespace的错误 2&#xff1a;解析思路 利用beansh…

了解Unity编辑器之组件篇UI(一)

UI组件&#xff1a;提供了用户交互&#xff0c;信息展示&#xff0c;用户导航等功能 一、Button&#xff1a;用于响应用户的点击事件 1.Interactable&#xff08;可交互&#xff09;&#xff1a;该属性控制按钮是否可以与用户交互&#xff0c;如果禁用则按钮无法被点击。可以通…

Ubuntu18.04配置PX4开发环境

源文件下载 读者可以参考PX4中文维基百科&#xff0c;或者使用下面命令↓ git clone https://github.com/PX4/PX4-Autopilot.git --recursive 下载完成之后&#xff0c;执行脚本安装命令&#xff0c;PX4给我们提供了脚本安装模式 bash ./PX4-Autopilot/Tools/setup/ubuntu.sh …

Spring Boot-3

学习笔记&#xff08;今天又读了好多篇的博客&#xff0c;做个今天的总结&#xff0c;加油&#xff01;&#xff01;&#xff01;&#xff09; PS&#xff1a;快到中伏了&#xff0c;今天还是好热 使用阿里巴巴 FastJson 的设置 1、jackson 和 fastJson 的对比 有很多人已经…

Linux 网络收包流程

哈喽大家好&#xff0c;我是咸鱼 我们在跟别人网上聊天的时候&#xff0c;有没有想过你发送的信息是怎么传到对方的电脑上的 又或者我们在上网冲浪的时候&#xff0c;有没有想过 HTML 页面是怎么显示在我们的电脑屏幕上的 无论是我们跟别人聊天还是上网冲浪&#xff0c;其实…

Python绘制多条y轴范围不同的曲线并在一张图上显示

如何使用Python绘制多条y轴范围不同的曲线&#xff0c;然后把它们合并在一张图上显示 import matplotlib.pyplot as plt import numpy as npdef multilines(target, x, ys, types, colors, x_label, labels):"""用来绘制多条y轴范围不同的线&#xff0c;并在一…

代码随想录 DAY28 93.复原IP地址 78.子集 90.子集II

93.复原IP地址 切割字符串&#xff0c;并且在每一个切割过的字符串后面加上 ‘ .’ 返回条件&#xff1a;逗点个数3 如果最后一小节符合要求&#xff0c;就将该字符串添加到结果集中 循环中&#xff1a;从start到i 符合要求&#xff0c;就继续添加逗点和字符 不符合下面就不用…

数学建模的六个步骤

一、模型准备 了解问题的实际背景&#xff0c;明确其实际意义&#xff0c;掌握对象的各种信息&#xff0c;以数学思路来解释问题的精髓&#xff0c;数学思路贯彻问题的全过程&#xff0c;进而用数学语言来描述问题。要求符合数学理论&#xff0c;符合数学习惯&#xff0c;清晰…

苹果iOS 16.6 RC发布:或为iPhone X/8系列养老版本

今天苹果向iPhone用户推送了iOS 16.6 RC更新(内部版本号&#xff1a;20G75)&#xff0c;这是时隔两个月的首次更新。 按照惯例RC版基本不会有什么问题&#xff0c;会在最近一段时间内直接变成正式版&#xff0c;向所有用户推送。 需要注意的是&#xff0c;鉴于iOS 17正式版即将…

第1题 好的序列(seq)

一个长为k的序列b1, b2, ..., bk (1 ≤ b1 ≤ b2 ≤ ... ≤ bk ≤ n)&#xff0c;如果对所有的 i (1 ≤ i ≤ k - 1)&#xff0c;满足bi | bi1&#xff0c;那么它就是好的序列。这里a | b表示a是b的因子&#xff0c;或者说a能整除b。 给出n和k&#xff0c;求…

git取消文件或文件夹追踪

1. 创建仓库时&#xff0c;在本地仓库根目录&#xff0c;创建.gitignore文件&#xff0c;写入忽略规则。规则可以是文件名&#xff0c;或者正则表达式。git 对于 .gitignore配置文件是按行从上到下进行规则匹配的。对于.gitignore文件本身的修改也会被提交到远程端。 2. 删除已…

Python获取接口数据

首先我们需要下载python&#xff0c;我下载的是官方最新的版本 3.8.3 其次我们需要一个运行Python的环境&#xff0c;我用的是pychram&#xff0c;需要库的话我们可以直接在setting里面安装 代码&#xff1a; # -*- codeing utf-8 -*- from bs4 import BeautifulSoup # 网页…

docker中搭建lnmp

目录 一&#xff1a;项目环境 1、主机ip需求 2、 任务需求 二&#xff1a;多级构建Dockerfile实验部署 lnmp 1、先部署一个有所有依赖包的镜像 2、搭建nginx 3、搭建mysql 4、搭建php 三&#xff1a;一级构建安装lnmp 1、构建自定义docker网络 2、构建nginx容器&#x…

Java版Spring Cloud+Spring Boot+Mybatis+uniapp知识付费平台讲解

提供私有化部署&#xff0c;免费售后&#xff0c;专业技术指导&#xff0c;支持PC、APP、H5、小程序多终端同步&#xff0c;支持二次开发定制&#xff0c;源码交付。 Java版知识付费-轻松拥有知识付费平台 多种直播形式&#xff0c;全面满足直播场景需求 公开课、小班课、独…

降压电路原理 12V电源是如何下降到5V?

引言&#xff1a; 12V-5V开关电源设计原理&#xff1a;以12V电压作为输入&#xff0c;通过控制开关电路的通断时间&#xff0c;实现电感的充放电时间&#xff0c;改变输出电压的平均值&#xff0c;然后进行LC滤波&#xff0c;对输出电压进行电压和电流反馈控制&#xff0c;使其…

企业知识管理系统安全是重中之重

企业开展知识管理工作的益处是全方位的&#xff0c;效果能从业务的各方面得到体现&#xff0c;最终效果就是企业竞争力的提升与企业经营业绩的提升。 知识管理系统的意义在于&#xff0c;构建系统的知识库&#xff0c;对纷杂的知识内容&#xff08;方案、策划、制度等&#xf…

Maven引入第三方jar包到问题处理

Maven项目引入第三方jar包到问题处理 背景:1. 下载jar包,通过maven命令手动安装到本地maven仓库2. jar放到项目路径下,通过pom直接引用 背景: 开发中会遇到需要使用第三方依赖的时,第三方依赖在中央仓库没有,解决方法 1. 下载jar包,通过maven命令手动安装到本地maven仓库 mv…

MybatisPlus使用排序查询时,将null值放到最后

1用户需求 查询结果&#xff0c;按照某些字段进行排序&#xff0c;将为null的值放到最后。按照更新时间排序&#xff0c;但是更新时间可能为null&#xff0c;因此将null的数据放到最后。 2解决方案 最简单的方式&#xff0c;当然是下面这种直接在SQL最后面 NULLS LAST &…

502 Bad GateWay报错的解决方法

什么是502 bad gateway 报错 简单来说 502 是报错类型代码 bad gateway 错误的网关。是Web服务器作为网关或代理服务器时收到无效的响应。 用我们的口语说就是运行网站的服务器暂时挂了(不响应)。 产生错误的原因 1.连接超时 我们向服务器发送请求 由于服务器当前链接太多&am…

自然语言处理从入门到应用——LangChain:模型(Models)-[大型语言模型(LLMs):基础知识]

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 大型语言模型&#xff08;LLMs&#xff09;是LangChain的核心组件。LangChain不提供大型语言模型&#xff0c;而是提供了一个标准接口&#xff0c;通过该接口我们可以与各种LLMs进行交互。LLM类是专为与LLM接口设计的类…