热门标签 | 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组件中如何接收传递数据






推荐阅读
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 1.点击查看隐藏当前按钮和这个内容,显示另一个内容能。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 本文介绍了如何使用vue-awesome-swiper组件,包括在main.js中引入和使用swiper和swiperSlide组件,以及设置options和ref属性。同时还介绍了如何在模板中使用swiper和swiperSlide组件,并展示了如何通过循环渲染swipes数组中的数据,并使用picUrl属性显示图片。最后还介绍了如何添加分页器。 ... [详细]
  • 网址:https:vue.docschina.orgv2guideforms.html表单input绑定基础用法可以通过使用v-model指令,在 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • Vue3中setup函数的参数props和context配置详解
    本文详细介绍了Vue3中setup函数的参数props和context的配置方法,包括props的接收和配置声明,以及未通过props进行接收配置时的输出值。同时还介绍了父组件传递给子组件的值和模板的相关内容。阅读本文后,读者将对Vue3中setup函数的参数props和context的配置有更深入的理解。 ... [详细]
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社区 版权所有