热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Reacthooks之useContext《类比Vue的Provide》(三)

系列文章目录提示:我又来更新啦!!!这次又把之前useEffect的补充了一次!!!

系列文章目录

提示:我又来更新啦!!!这次又把之前useEffect的补充了一次!!!!




文章目录


  • 系列文章目录
  • 前言
    • 1.Vue中的Provide和useContext(相同点)
    • 2..Vue中的Provide和useContext(不同点)

  • 一、useContext的用法(贼简单,自己看官网还容易看不懂)
    • 第一步:创建传值的组件结构(爷爷,父亲,孩子组件)
      • 1.说明如下:
      • 2.结构如下图:

    • 第二步:创建Context(一定要导出)
      • 代码如下

    • 第三步:书写传值姿势
    • 第四步:导入useContext(一定是函数组件)
      • child组件代码如下
      • 说明如下图

    • 第五步:查看传值结果
    • 默认Text按钮
    • 修改成Primary类型按钮

  • 二、如何修改context的值(相当于是多传了一个修改函数)
    • 1.修改索引(代码如下)
    • 2.在child中添加一行代码,调用传下去的函数(一定要传修改的参数!)

  • 总结:⚠️重点注意(我踩的坑)
    • 问题一:为什么第一次渲染的时候不是link类型,而是text类型
    • 问题二:父亲组件可以拿到数据吗
    • 问题三:class组件怎么拿数据(点击👇🔗)





前言

1.Vue中的Provide和useContext(相同点)


1.主要都是为了解决传值问题出现的


2.主要用于 👴==》 👨 ==》孩子组件的传值问题,解决开发者从爷爷到孩子组件的 两次props的复杂传值问题


2…Vue中的Provide和useContext(不同点)


1.使用的方法不同(vue中的更加简单)


2.使用的方式不同(useContext相当于是爷爷组件的所有子组件都可以访问到传下来的数据。)




一、useContext的用法(贼简单,自己看官网还容易看不懂)

第一步:创建传值的组件结构(爷爷,父亲,孩子组件)


1.说明如下:


这里主要是 爷爷组件导入了 父亲组件父亲组件导入了 孩子组件 所以就形成了一个三级嵌套的关系。 我们这时候 爷爷传给父就可以用props传值,传给孩子可以使用context进行传值


2.结构如下图:

在这里插入图片描述

第二步:创建Context(一定要导出)


代码如下

export const MyContext = React.createContext('link')

第三步:书写传值姿势

//这里的Value就是传给下面的值
<MyContext.Provider value&#61;{buttonType as any}>
<FatherComponent></FatherComponent>
</MyContext.Provider>

第四步&#xff1a;导入useContext&#xff08;一定是函数组件&#xff09;


如果这里传的组件不是【函数组件】就不要使用 useContext去接受&#xff0c;
可以考虑使用consumer 或者 staic contype去接受 或者直接把类组件中的contype进行更改


child组件代码如下

import React, { useContext } from "react";
import &#39;./index&#39;
import { MyContext } from "../../../../App";
import { Button } from "antd";
export default function Child(props:any){
const type &#61; useContext(MyContext) as any;
console.log(type);
return <div>
<Button type&#61;{type.type}>child按钮</Button>
</div>
}

说明如下图

在这里插入图片描述

第五步&#xff1a;查看传值结果


默认Text按钮

在这里插入图片描述

修改成Primary类型按钮

在这里插入图片描述



二、如何修改context的值&#xff08;相当于是多传了一个修改函数&#xff09;

1.修改索引&#xff08;代码如下&#xff09;


//修改了下面的这个Value值&#xff08;改成了数组&#xff09;。 //索引1是对应的一个类型&#xff0c;索引2表示的是修改当前type的方法


<MyContext.Provider value&#61;{[buttonType,setButtonType] as any}>
<FatherComponent></FatherComponent>
</MyContext.Provider>

2.在child中添加一行代码&#xff0c;调用传下去的函数&#xff08;一定要传修改的参数&#xff01;&#xff09;

type[1]({ type: &#39;text&#39; })

总结&#xff1a;⚠️重点注意&#xff08;我踩的坑&#xff09;

提示&#xff1a;这里对文章进行总结&#xff1a;

问题一&#xff1a;为什么第一次渲染的时候不是link类型&#xff0c;而是text类型


只有当组件所处的树中没有匹配到 Provider 时&#xff0c;其 defaultValue 参数才会生效 此默认值有助于在不使用 Provider 包装组件的情况下对组件进行测试。注意&#xff1a;将 undefined 传递给 Provider 的 value 时&#xff0c;消费组件的 defaultValue 不会生效。


问题二&#xff1a;父亲组件可以拿到数据吗


通过相同的使用方式&#xff0c;父组件也是可以拿到context向下传递的数据已经测试过了&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;


问题三&#xff1a;class组件怎么拿数据&#xff08;点击&#x1f447;&#x1f517;&#xff09;

React中的 context 在class组件中如何接收传递数据






推荐阅读
  • 使用 Vuex 管理表单状态:当输入框失去焦点时自动恢复初始值 ... [详细]
  • 基于 Vue 和 Element UI 实现的简洁登录界面设计
    本文介绍了一种利用 Vue.js 和 Element UI 框架构建的简洁登录界面设计。该设计不仅注重用户体验,还确保了界面的美观性和易用性。通过合理的布局和组件配置,实现了高效、响应式的登录功能,适用于多种前端应用场景。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 在 Vue 应用开发中,页面状态管理和跨页面数据传递是常见需求。本文将详细介绍 Vue Router 提供的两种有效方式,帮助开发者高效地实现页面间的数据交互与状态同步,同时分享一些最佳实践和注意事项。 ... [详细]
  • 2.2 组件间父子通信机制详解
    2.2 组件间父子通信机制详解 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 优化Vite 1.0至2.0升级过程中遇到的某些代码块过大问题解决方案
    本文详细探讨了在将项目从 Vite 1.0 升级到 2.0 的过程中,如何解决某些代码块过大的问题。通过具体的编码示例,文章提供了全面的解决方案,帮助开发者有效优化打包性能。 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • 在最近的学习过程中,我对Vue.js中的Prop属性有了更深入的理解,并认为这一知识点至关重要,因此在此记录一些心得体会。Prop属性用于在组件之间传递数据。由于每个组件实例的作用域都是独立的,无法直接引用父组件的数据。通过使用Prop,可以将数据从父组件安全地传递到子组件,确保数据的隔离性和可维护性。 ... [详细]
  • 本文介绍了 Vue 开发的入门指南,重点讲解了开发环境的配置与项目的基本搭建。推荐使用 WebStorm 作为 IDE,其下载地址为 。安装时请选择适合您操作系统的版本,并通过 获取激活码。WebStorm 是前端开发者的理想选择,提供了丰富的功能和强大的代码编辑能力。 ... [详细]
author-avatar
NethJ
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有