react中context的使用详解

2023-11-15

先说一说context是干什么的:

        跨层级通信

        一般组件通信的方法都是通过props来传递,不过这种方法当有了第三级或往后孙孙组件的时候就显得比较繁琐。以及不好修改。这时我们可以使用context来管理这些数据,不管多少层级都能让想要使用这些数据的组件能拿到。还有别的方法,mobx或redux。这些可以自行了解

 说一下文件目录以及思路:

        创建index文件作为父组件,child1组件为子组件,child2为子子组件。同级下创建一个store.js中存放数据和创建context。

        index中呢引入child1组件,child1组件呢引入child2组件。我们现在要做的就是不使用props在child2中获取index父级的数据。

store.js :

        可以分为三步:1.引入React。2.创建数据。3.创建导出context

import React from 'react';

这里我们可以定义数据格式
export const Resume = {
    base: {
        name: '',
        age: ''
    },
    exp: {
        year: '',
        job: ''
    },
    lists: [],
}

通过createContext创建context并导出
export const ResumeContext = React.createContext(Resume);

index.jsx作为父组件,也可以总结为三个步骤:1.导入。2.注入。3.value赋值

import React, { Component } from 'react';
import Child1 from './child1'
//这里引入的组件大家可以随意定义
import Wei from './weike'

//在这里引入store.js
import { ResumeContext } from './store.js'

class View extends Component {
    constructor(props) {
        super(props)
        this.state = {

            // 一般我们不会在store中写数据,数据在父组件中定义
            resume: {
                base: {
                    name: '小红',
                    age: 1212
                }
            }
        }
    }
    
    // 这个方法呢我们可以返回一个组件。
    com() {
        return <Wei />
    }
    //也可以返回标签文本
    fn() {
        return (
            <div>这是fn</div>
        )
    }
    // 这个函数接收子组件传过来的参数
    parentFn(text) {
        console.log(text)
    }

    render() {
        const { resume } = this.state
        return (
            <div>
                <h3>index组件</h3>
                
                // 父组件在传递数据时要用Context.Provider。value中我们可以传多种数据结构
                <ResumeContext.Provider value={{
                    base: resume.base,    //基础数据
                    com: this.com,        //组件   调一个方法返回一个组件
                    com1: <Wei />,        //组件   也可以直接调一个组件,
                    fn: this.fn,          // 也可以是文本  
                    callback: this.parentFn   //子组件传过来的值,打印出来
                }}>
                    <Child1 />
                </ResumeContext.Provider>
            </div>
        );
    }
}

export default View;

 child2作为使用数据的,里面步骤也可以总结为三步:1.引入。2.接收。3.使用。

import React, { Component, useCallback } from 'react';

//引入context
import { ResumeContext, } from './store.js'

class View extends Component {
    constructor(props) {
        super(props)
        this.state = {

        }
    }
    // static 定义
    static contextType = ResumeContext;

    //这里是传给父组件的参数
    componentDidMount() {
        const { callback } = this.context;
        callback('1212')
        // === this.parentFn('1212')
    }

    render() {
        console.log(this.context)
        //这里打印的context就相当于props,它是一个对象。里面包含父组件传过来的数据
        //解构
        const { base, com, com1, fn } = this.context

        return (
            <div>
                <h3>child22222组件</h3>
                // 基本数据类型使用
                姓名:{base.name}
                //com和com1都是调用传来的组件,写法不同而已
                {com()}
                {com1}
                //文本
                {fn()}

            </div>
        );
    }
}

export default View;



***子子组件还有一种写法,用Context.Consumer接收

<ResumeContext.Consumer>
{
    (value) => (
    <div>{this.age(value)}{value.base.name}</div>
    )
}
</ResumeContext.Consumer>

 child1组件就只是引用了child2组件。没有别的用处

        下面看下出来的效果图:

 

 至此context的总结使用方法就大概这些,如有错误欢迎指正

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

react中context的使用详解 的相关文章

  • 物联网毕设 -- 智能热水器(GPRS+APP+OneNET)

    目录 前言 一 连线图 1 原理图 2 PCB效果 3 实物效果 4 功能概括 1 硬件端 2 APP端 3 云平台端 演示视频 二 底层代码使用方式 1 使用说明 2 下载程序 3 查看云平台 三 APP使用方式 1 下载APP 1 操作

随机推荐

  • 【XGBoost】第 5 章:XGBoost 揭幕

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 增益带宽积 压摆率

    带宽 它指的是电路可以保持稳定工作的频率范围 选高速运放能减少对贷款的影响 只要能够完美再现方波 就是高带宽电路 带宽与压摆率同时变化 高频下 增益就缩小了 说明增益是有带宽的 在一定频率内增益才稳定 一倍放大 与 10倍放大输出用1 10
  • AntDesign-vue-Tree组件-拖动排序

  • c++primer plus第一章复习题和编程练习答案

    复习题 c 程序的模块是 函数 include
  • MATLAB —— 低通滤波器设计与信号滤波

    百度百科 简介 低通滤波器是容许低于截止频率的信号通过 但高于截止频率的信号不能通过的电子滤波装置 1 提取滤波器 系数矩阵 打开工具 MATLAB APP Filter Designer 参数设置 滤波器类型 Response Type
  • 爬虫实例——某翻译网站参数sign的构造

    1 网页分析 该翻译网站为进行Ajax加载的网站 针对这种网页的爬取 一般有两种方式 使用Selenium等模拟浏览器的方式进行爬取 这种方式实现起来较为简单 但是爬取速度相对较慢 直接对网站的接口进行请求 爬取速度相对较快 但是某些网站的
  • 7 125 kHz RFID技术

    ATA5577C应答器芯片 芯片性能和电路组成 主要技术性能 低功耗 低工作电压 非接触能量供给和读 写数据 工作频率范围为100 150 kHz EEPROM存储器容量为363位 分为11块 每块33位 具有7块用户数据 每块32位 共2
  • 算法分析02--分治法

    3 分治法 3 1递归 递归是指子程序 或函数 直接调用自己或通过一系列调用语句间接调用自己 是一种描述问题和解决问题的常用方法 使用递归技术往往使函数的定义和算法的描述简洁且易千理解 递归有两个基本要素 边界条件 即确定递归到何时终止 也
  • FASTAI and Fine-Tuning BERT with FastAI

    这是一篇笔记类型文章 主要是从新学习一下fastai 和实践 pytorch pretrained BERT 和 pytorch transformers 对接fastai 后简洁快速实现bert模型的训练和执行任务 我还是一个小白 大佬看
  • python Elasticsearch 排序

    sort 与query是同级的 Elasticsearch python sort sort score order desc query function score query match all script score lang p
  • 接口报错之number值过大问题

    number的最大的值为2的53次方 9007199254740992 16位 当你传入的参数为Number类型时候超过16位 js就识别不了 接口会出现错误的情况 可以直接改成字符串就好了 1 JavaScript中所有的数字 无论是整数
  • 合工大 编译原理 实验二 LL1 自动生成M[A,a]

    实验目的 通过完成预测分析法的语法分析程序 了解预测分析法和递归子程序法的区 别和联系 使学生了解语法分析的功能 掌握语法分析程序设计的原理和构造方 法 训练学生掌握开发应用程序的基本方法 有利于提高学生的专业素质 为培 养适应社会多方面需
  • C++ *和&

    简单理解 是指向内存的地址变量 是取变量的地址 介绍参见 https www cnblogs com mr stn p 9037773 html简介
  • spring boot项目显示3行日志错误,内置tomcat不可使用

    spring boot项目显示3行日志错误 内置tomcat不可使用 首先这中错误是只显示三行 第一种方法是没有用spring boot starter web 在pom中将这个依赖放在第一个 第二种方法是继承ServletInitiali
  • 详解如何将python3.6软件的py文件打包成exe程序

    本文来源于公众号 csdn2299 喜欢可以关注公众号 程序员学府 这篇文章主要介绍了详解如何将python3 6软件的py文件打包成exe程序 小编觉得挺不错的 现在分享给大家 也给大家做个参考 一起跟随小编过来看看吧 在我们完成一个Py
  • Codeforces Round 867 (Div. 3)(A题到E题)

    链接 Dashboard Codeforces Round 867 Div 3 Codeforces 头一次div3做出来四题 第五题也差临门一脚 赛后看到别人e题跟自己几乎一样的思路肠悔青了 还得练才行 A TubeTube Feed 签
  • 网络系列--如何理解网络“软化”?简要整理分析网络软化的赋能技术。

    文章目录 对网络软化的理解 SDN NFV NFV与SDN简单对比 如何理解网络 软化 简要整理分析网络软化的赋能技术 对网络软化的理解 在互联网飞速发展的今天 通信网络规模爆发式的增长以及客户对网络性能需求的多样性 对网络的灵活性和敏捷性
  • 【0day】复现时空智友企业流程化管控系统SQL注入漏洞

    注 该文章来自作者日常学习笔记 请勿利用文章内的相关技术从事非法测试 如因此产生的一切不良后果与作者无关 目录 一 漏洞描述 二 影响版本 三 资产测绘 四 漏洞复现 一 漏洞描
  • cocos2d-x实例学习(8)之CCJumpTo和CCJumpBy

    CCJumpTo和CCJumpBy概念 CCJumpTo 把某一CCSprite跳到某一位置 CCJumpBy 把某一CCSprite跳起一段距离 它有一个方法reverse 它让对象按原路径返回 CCJumpTo和CCJumpBy示例 创
  • react中context的使用详解

    先说一说context是干什么的 跨层级通信 一般组件通信的方法都是通过props来传递 不过这种方法当有了第三级或往后孙孙组件的时候就显得比较繁琐 以及不好修改 这时我们可以使用context来管理这些数据 不管多少层级都能让想要使用这些