useContext详细说明与使用

2023-11-15

一、什么是useContext

在Hooks之前,react开发者都是使用class组件进行开发,父子组件之间通过props传值。但是现在开始使用方法组件开发,没有constructor构造函数,也就没有了props的接收,所以父子组件的传值就成了一个问题。

于是,就有了useContext

别忘记 useContext 的参数必须是 context 对象本身

  • 正确: useContext(MyContext)
  • 错误: useContext(MyContext.Consumer)
  • 错误: useContext(MyContext.Provider)

二、useContext作用

1.useContext可以帮助我们跨越组件层级直接传递变量,实现数据共享。

2.Context的作用就是对它所包含的组件树提供全局共享数据的一种技术。

三、代码示例

1、创建父组件

import React,{useContext, useState, createContext} from 'react';
import {Button} from 'antd';
import '../../App.css';

const CountContext = createContext();

const TestContext = () =>{
    const [count, setCount] = useState(0);
    console.log(CountContext);
    console.log(useContext(CountContext));
    return(
      <div>
          <p>父组件点击次数:{count}</p>
          <Button type={"primary"} onClick={()=>setCount(count+1)}>点击+1</Button>
          <CountContext.Provider value={count}>
            <Counter/>
          </CountContext.Provider>
      </div>
  )
};

2、创建子组件

const Counter = () => {
    const count = useContext(CountContext);
    console.log(CountContext);
    // console.log(count);
    // console.log(useContext(CountContext));
    return (
        <div>
            <p>子组件获得的点击数量:{count}</p>
        </div>
    );
};

3、完整代码

import React,{useContext, useState, createContext} from 'react';
import {Button} from 'antd';
import '../../App.css';

const CountContext = createContext();

const TestContext = () =>{
    const [count, setCount] = useState(0);
    console.log(CountContext);
    console.log(useContext(CountContext));
    return(
      <div>
          <p>父组件点击次数:{count}</p>
          <Button type={"primary"} onClick={()=>setCount(count+1)}>点击+1</Button>
          <CountContext.Provider value={count}>
            <Counter/>
          </CountContext.Provider>
      </div>
  )
};

const Counter = () => {
    const count = useContext(CountContext);
    console.log(CountContext);
    // console.log(count);
    // console.log(useContext(CountContext));
    return (
        <div>
            <p>子组件获得的点击数量:{count}</p>
        </div>
    );
};

export default TestContext;

4、运行效果

点击+1的时候,父组件和子组件都能获取到当前点击的次数。 

 

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

useContext详细说明与使用 的相关文章

随机推荐

  • vscode快捷键(全局搜索等

    vscode其实有强大的快捷键搜索功能 全部快捷键可以参考官网 Visual Studio Code Key Bindings Mac快捷键 https code visualstudio com shortcuts keyboard sh
  • 【IDEA】idea Gradle 里面java类显示为灰色

    文章目录 1 概述 2 第一步 1 概述 IDEA下导入了es源码 并且编译成功 参考 Elasticsearch es 6 8 编译成功 但是看源码的时候 却发现部分为黑色 2 第一步 找到父项目 点击右键 选择Open Module S
  • 睿智的目标检测36——Pytorch搭建Efficientdet目标检测平台

    睿智的目标检测33 Pytorch搭建Efficientdet目标检测平台 学习前言 什么是Efficientdet目标检测算法 源码下载 Efficientdet实现思路 一 预测部分 1 主干网络介绍 2 BiFPN加强特征提取 3 从
  • C++获取Unix时间戳(分别以秒和毫秒为单位)的几种方法

    文章目录 前言 正文 1 调用ctime库 2 调用chrono 3 调用sys timeb h 总结 前言 有时需要打印当前的绝对时间 并计算时间间隔 Unix时间戳是一种很好的时间记录标准 表示从1970年1月1日 UTC GMT的午夜
  • Ubuntu系统安装中文输入法教程

    新安装的Ubuntu系统由于无法进行中文输入 经过排查找到解决方法 Ubuntu系统安装中文输入法教程 在Vmware虚拟机中安装好Ubuntu系统 但是一般情况下无法使用中文输入 需要使用中午输入的时候非常不方便 可以通过在终端中输入以下
  • ESP32基础应用之LVGL基础

    文章目录 1 实验目的 1 1 参考文章 2 实验工具 3 准备工作 3 1 搭建ESP32开发环境 3 2 克隆lv port esp32工程 4 配置lv port esp32工程 5 实验验证 6 使用过程遇到的问题 6 1 触摸功能
  • Google guava之BiMap简介说明

    转自 Google guava之BiMap简介说明 下文笔者讲述guava中BiMap集合的简介说明 如下所示 guava之BiMap集合简介 BiMap集合 用于实现key和value翻转 BiMap可进行正排索引和倒排索引 注意事项 b
  • SpringMVC中整合XML、JSON试图一

    http www cnblogs com hoojo archive 2011 04 29 2032571 html SpringMVC中整合了JSON XML的视图 可以通过这些视图完成Java对象 到XML JSON的转换 转换XML提
  • 1.centOS7 下载安装教程

    1 下载镜像 我选择的是阿里的镜像没去官网 官网下载太慢 阿里云开源镜像站 阿里巴巴开源镜像站 OPSX镜像站 阿里云开发者社区 点击centos下面选择版本 根据自己需要选择 我选择的是isos 后面的名称 我下面为大家一一介绍下 DVD
  • Arduino Uno开发板+电机驱动扩展版CNC Shield V3.0硬件说明

    陈拓 2023 03 24 2023 03 29 1 Arduino CNC Shield V3 00电机驱动扩展版 注意 板子左侧中间的玻璃管是玻封保险丝 Arduino CNC Shield可以搭载A4988 DRV8825等步进电机驱
  • js逆向(MD5)

    实现中关村MD5登录 比较简单 网址 https www zol com cn 点击登录按钮输入自己的账号和密码 先注册自己的账号和密码 防止ajax请求不到 找到加密的参数 输入账号和密码 调出开发者工具 在fetch xhr这一栏中也是
  • conda和docker的环境打包

    conda 需安装conda pack 命令 conda pack n env o env tar gz ignore editable packages 如果安装了可编辑的包 加上 ignore editable packages doc
  • google api设计指南-简介

    简介 这是联网 API 的通用设计指南 它自 2014 年起在 Google 内部使用 是 Google 在设计 Cloud API 和其他 Google API 时遵循的指南 此设计指南在此处共享 以便为外部开发者提供信息 并使我们所有人
  • 一句Python命令启动一个Web服务器

    利用Python自带的包可以建立简单的web服务器 在DOS里cd到准备做服务器根目录的路径下 输入命令 python m Web服务器模块 端口号 默认8000 例如 python m SimpleHTTPServer 8080 然后就可
  • Top K问题的两种解决思路

    Top K问题在数据分析中非常普遍的一个问题 在面试中也经常被问到 比如 从20亿个数字的文本中 找出最大的前100个 解决Top K问题有两种思路 最直观 小顶堆 大顶堆 gt 最小100个数 较高效 Quick Select算法 Lee
  • vscode中,CMakelists.txt不在根目录下,cmake tools如何写配置文件(指定文件夹cmake)

    当在vs code使用cmake tools搭建cmake环境时 有时CMakeLists txt文件不在根目录下面 而在某个子文件夹里 可以通过修改 vscode下的settings json文件夹 指定配置文件夹 cmake sourc
  • 我的第一台电脑

    男生 有两个亲姐 各相差4岁 我初一的时候 二姐高一 大姐大一 我用过的第一台电脑 差不多是2014年的时候 用过的第一台电脑来自于我大姐的那台联想的i5 4代CPU的笔记本 硬盘甚至不是固态 现在看来非常卡顿 当时用起来感觉还很顺滑 这台
  • 傻白入门芯片设计,芯片键合(Die Bonding)(四)

    目录 一 键合 Bonding 1 什么是键合 Bonding 2 芯片键合步骤 3 芯片拾取与放置 Pick Place 4 芯片顶出 Ejection 工艺 5 使用环氧树脂 Epoxy 实现粘合的芯片键合工艺 6 使用晶片黏结薄膜 D
  • 怎样创建字符串数组

    使用char 数组或string数组 string month Number January February March April May Jun July August September October November Decem
  • useContext详细说明与使用

    一 什么是useContext 在Hooks之前 react开发者都是使用class组件进行开发 父子组件之间通过props传值 但是现在开始使用方法组件开发 没有constructor构造函数 也就没有了props的接收 所以父子组件的传