React.createContext 的使用说明--用于解决多级组件的传值问题

2023-05-16

Context (中文翻译:上下文),当你不想在组件树中通过逐层传递 props 或者 state 方法来传递数据时,可以使用Context来实现跨层级的组件数据传递。React.createContext 就是用于解决祖先组件与后代组件(中间隔了好多层组件)传值问题。

原本组件传递数据需要一层一层props传递,传递太过繁琐,例如以下代码:

import React from 'react'
function NeedData(props) {
    return <div>{props.value2}</div>;
}
// 中间组件
function Middle(props) {
    return (
        <div>
            <NeedData value2={props.value} />
        </div>
    );
}

export default class FatherComponent extends React.Component {
    render() {
        return <Middle value="abcd" />;
    }
}

createContext 解决无需按层级关系传递,原理如下:

1、createContext 创建一条索引,相当于开辟一个空间 ,可以配置默认参数,支持任何类型;createContext创建的对象包含 Provider 与 Consumer 组件。
2、Provider提供的数据(方法)共享 ,传参使用value,且value 是固定写法默认,必填写其它不生效。value接收的变量建议state中:每一次 Provider 重渲染时,consumers 组件将会重新渲染,因为value属性总被赋予新值;
3、Consumer接收者,必须以函数方式获取;

通过 Provider传递数据,通过 Consumer接受数据

 以下代码演示了可以通过Provider来传递数据,通过Consumer 来接收数据,

import React, { Component, createContext } from 'react';
const MyContext = createContext(); //MyContext 自定义名称
//孙子组件
class GrandsonComponent extends Component {
    static contextType = secondContext
    render() {
        console.log(this.context)
        return (
            <div>
                <MyContext.Consumer>
                    {value => <div>{value}</div>}
                </MyContext.Consumer>
            </div>
        )
    }
}
//中间组件
class Middle extends Component {
    render() {
        return (
            <GrandsonComponent />
        )
    }
}
//顶级父组件
class TopComponent extends Component {
    onfunction() {
        return `数据`
    }
    render() {
        return (
            <div>
                <MyContext.Provider value='test'>
                     <Middle />
                </MyContext.Provider>
            </div>
        )
    }
}
export default TopComponent 

Provider 接收一个 value 属性,传递给Consumer组件。一个 Provider 可以和多个Consumer组件有对应关系。多个 Provider 也可以嵌套使用,里层的会覆盖外层的数据。

当 Provider 的 value 值发生变化时,它内部的所有Consumer组件都会重新渲染。Provider 及其内部 consumer 组件都不受制于 shouldComponentUpdate 函数,因此当 consumer 组件在其祖先组件退出更新的情况下也能更新。

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

React.createContext 的使用说明--用于解决多级组件的传值问题 的相关文章

  • 全球首发,国产开源「文本-视频生成」模型!免费在线体验,一键实现视频生成自由...

    来源 xff1a 新智元 去年4月 xff0c OpenAI发布的DALL E 2用更高的分辨率 更真实的图像生成以及更准确地理解自然描述 xff0c 横扫整个AIGC领域 不过图像生成真正进入全民化还要数Stable Diffusion的
  • 1、回文判断(java数据结构)

    回文判断 回文是指正读反读均相同的字符序列 xff0c 如 abba 和 abdba 均是回文 xff0c 但 good 不是回文 编写一个程序 xff0c 使用栈判定给定的字符序列是否为回文 输入格式 输入待判断的字符序列 xff0c 按
  • 12、栈、队列和字符串的基本操作(Java数据结构)

    栈 队列和字符串的基本操作 使用栈与队列逐个处理字符串中的每个字符 将输入的字符串的字符依次入栈 xff0c 然后输出栈中元素个数与栈顶元素 xff0c 以空格分隔 然后将栈中元素依次出栈并输出 xff0c 出栈时将不等于指定字符的元素依次
  • 在虚拟机上使用Ghost备份/恢复操作系统

    课堂作业 xff1a Windows10备份与恢复 实验目的 xff1a 使用Ghost备份 恢复操作系统 需求描述 用Ghost软件为Windows 10样机制作备份镜像 将制作的Gho文件备份到本机其他磁盘 xff0c 以备不时之需 环
  • 如何利用抓包验证 三次握手,四次挥手

    三次握手 xff0c 四次挥手 1 打开Centos 7 6 虚拟机设置 xff0c 自定义网卡VMnet8 2 打开控制面板 网络和internet 网络连接 xff0c 查看VMnet8网卡IPV4地址 3 开启虚拟机 xff0c 点击
  • VMware、linux虚拟机设置网络实现虚拟机与主机网络互通

    需要配置三个方面才可以 xff0c 即 xff1a WMware网络配置 windows主机网络配置 虚拟机网络配置 首先 xff0c 确认VMware虚拟机设置中配置的网络连接方式为 xff1a NAT模式 可以在VMware上方的菜单中
  • 单臂路由的使用及详细配置命令

    实验环境 xff1a 需求描述 xff1a 使各个vlan之间都能ping通 操作步骤 xff1a 1 LSW1划分vlan xff0c 讲对应的端口划分到对应的vlan 里面 xff0c 进入g0 0 1 xff0c 端口设置为trunk
  • 学习华为特殊端口模式Hybrid(带配置命令)

    目录 HybridHybrid接口工作原理实验环境 xff1a 实验步骤 xff1a 一 交换机的配置1 SW1的配置2 SW2的配置 二 PC地址配置三 PC互ping xff0c 简述PC互ping流程 Hybrid Hybrid接口工
  • ENSP 单臂路由的配置(带配置命令)

    目录 单臂路由原理实验环境 xff1a 需求描述 xff1a 操作步骤 xff1a 一 LSW1的配置二 R1的配置三 配置PC IP地址四 验证 单臂路由原理 在路由器的一个接口上通过配置逻辑接口的方式和E trunk多链路汇聚 xff0
  • Samba服务的匿名访问用户访问以及权限控制

    目录 一 samba服务概述二 Samba服务的配置2 1 安装DHCP服务2 2 win10通过DHCP 获取地址2 3 安装并配置Samba服务2 3 1 修改samba配置文件 匿名访问2 3 2 启动Samba服务2 3 4用户密码
  • k8s多master节点使用二进制部署群集

    目录 一 K8S 多节点部署1 1 拓补图与主机分配1 2 mster02部署1 2 1 复制master中的三个组件启动脚本kube apiserver service kube controller manager service ku
  • K8S网站页面的搭建与证书优化配置

    一 下载官方的YAML 文件 五个文件各自的作用 dashboard configmap yaml 配置文件 dashboard deployment yaml 部署 dashboard rbac yaml 授权管理 一般来说要绑定角色 d
  • kubectl管理与项目的完整周期

    目录 一 kubectl管理二 项目的完整周期2 1 创建项目2 2 项目的发布2 3 更新版本2 4 版本回滚2 5 删除资源 一 kubectl管理 Kubectl是管理k8s集群的命令行工具 xff0c 通过生成的json格式传递给a
  • 学习记录:Ubuntu系统安装远程控制软件teamviewer

    一 teamviewer安装包下载 1 下载官方地址 xff1a https www teamviewer cn cn download linux 2 百度网盘下载地址 xff1a 链接 xff1a https pan baidu com
  • 结构体的内存对齐

    之前我们都知道int类型大小是4个字节 xff0c char类型为1个字节 xff0c double为8个字节等等 但是结构体是由很多类型组成的 xff0c 那么它的大小是多少呢 xff1f 是所有类型相加之和还是另有算法 xff1f 接下
  • (linux-x86-arm)银河麒麟V10安装ToDesk远程控制

    摘要 xff08 linux x86 xff09 银河麒麟V10安装ToDesk远程控制 xff08 类似向日葵 xff0c 但是不限速 xff09 xff0c 同理UOS和其他操作系统操作一样 原文地址 xff1a xff08 linux
  • ftp550权限问题

    很多人在使用别人服务器上传ftp的时候都是没什么问题的 xff0c 但是如果遇到了自己或公司内部的服务器就可能出现ftp权限550的问题 问题 xff1a 为什么会出现550 xff1f 因为你的权限出现问题 xff0c 可能的问题就是服务
  • ABAQUS几何非线性问题:薄板大变形(如何定义材料方向)

    ABAQUS几何非线性问题 xff1a 薄板大变形 在本案例中 xff0c 笔者将从几何非线性角度分析一个线性材料的薄板在发生大尺度变形情况下的非线性问题 另外向大家简单介绍ABAQUS在求解非线性问题时所采用的方法 xff0c 以及分析步
  • you-get库、you-get 下载视频失败

    报错描述 xff1a 正常输入指令下载视频 xff0c 终端提示 some thiing went wrong 排查错误 xff1a 1 排查python环境版本过低 xff0c 截止目前you get 支持Python 3 7 4 or
  • Kafka性能测试工具

    简介 Kafka本身自带了性能测试的脚本 xff0c 可以测试发送端和消费端的速度 xff0c 分别为 xff1a kafka producer perf test sh kafka consumer perf test sh 这两个脚本可

随机推荐