位置: IT常识 - 正文

【React-Hooks进阶】useState回调函数的参数 / useEffect发送网络请求/ useRef / useContext(react hook详解)

编辑:rootadmin
【React-Hooks进阶】useState回调函数的参数 / useEffect发送网络请求/ useRef / useContext

推荐整理分享【React-Hooks进阶】useState回调函数的参数 / useEffect发送网络请求/ useRef / useContext(react hook详解),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:react hook教程,react hook详解,react hook ref,react hooks 教程,react hooks in action,react hook hoc,react hook ref,react hook hoc,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

博主主页👉🏻蜡笔雏田学代码 专栏链接👉🏻React专栏 上篇文章初步学习了Hooks的基础知识 今天来深入学习Hooks的一些扩展知识 感兴趣的小伙伴一起来看看吧~🤞

文章目录useState -回调函数的参数使用场景语法语法规则语法选择代码useEffect - 发送网络请求使用场景语法要求正确写法useRef使用场景使用步骤获取dom获取组件实例useContext实现步骤代码实现useState -回调函数的参数使用场景

参数只会在组件的初始渲染中起作用,后续渲染时会被忽略。如果初始 state 需要通过计算才能获得,则可以传入一个函数,在函数中计算并返回初始的 state,此函数只在初始渲染时被调用。

语法const [name, setName] = useState(()=>{ // 编写计算逻辑 return '计算之后的初始值'})语法规则回调函数return出去的值将作为 name 的初始值回调函数中的逻辑只会在组件初始化的时候执行一次语法选择如果就是初始化一个普通的数据 直接使用 useState(普通数据) 即可如果要初始化的数据无法直接得到需要通过计算才能获取到,使用useState(()=>{})代码import { useState } from 'react'function Counter(props) { const [count, setCount] = useState(() => { return props.count }) return ( <div> <button onClick={() => setCount(count + 1)}>{count}</button> </div> )}function App() { return ( <> <Counter count={10} /> <Counter count={20} /> </> )}export default AppuseEffect - 发送网络请求使用场景

如何在useEffect中发送网络请求,并且封装同步 async await操作

语法要求

不可以直接在useEffect的回调函数外层直接包裹 await ,因为异步会导致清理函数无法立即返回

useEffect(async ()=>{ const res = await axios.get('http://geek.itheima.net/v1_0/channels') console.log(res)},[])正确写法

在内部单独定义一个函数,然后把这个函数包装成同步

useEffect(() => { // 发送请求 async function loadData() { const res = await fetch('http://geek.itheima.net/v1_0/channels') console.log(res) } loadData()}, [])useRef使用场景【React-Hooks进阶】useState回调函数的参数 / useEffect发送网络请求/ useRef / useContext(react hook详解)

在函数组件中获取真实的dom元素对象或者是组件对象

使用步骤导入 useRef 函数执行 useRef 函数并传入null,返回值为一个对象 内部有一个current属性存放拿到的dom对象(组件实例)通过ref 绑定 要获取的元素或者组件获取domimport { useEffect, useRef } from 'react'function App() { const h1Ref = useRef(null) useEffect(() => { console.log(h1Ref.current) },[]) return ( <div> <h1 ref={ h1Ref }>this is h1</h1> </div> )}export default App获取组件实例

函数组件由于没有实例,不能使用ref获取,如果想获取组件实例,必须是类组件

import React, { useRef } from 'react'class TeastC extends React.Component { render() { return ( <div>我是类组件</div> ) }}function App() { const testRef = useRef(null) useEffect(() => { console.log(testRef.current) }) // useEffect回调 是在dom渲染之后还是之前执行? 之后! return ( <div> <TeastC ref={testRef} /> </div> )}useContext

一种组件间通信方式, 常用于【祖组件】与【后代组件】间通信

在hooks下如何跨组件传数据

实现步骤使用createContext 创建Context对象在顶层组件通过Provider 提供数据在底层组件通过useContext函数获取数据代码实现import { createContext, useContext, useState } from 'react';// 创建Context对象const Context = createContext()function ConA() { // 底层组件通过useContext函数获取数据 const count = useContext(Context) return ( <div> this is ConA app传过来的数据是:{count} <ConC /> </div> )}function ConC() { // 底层组件通过useContext函数获取数据 const count = useContext(Context) return ( <div> this is ConC app传过来的数据是:{count} </div> )}function Demo() { const [count, setCount] = useState(10) return ( // 顶层组件通过Provider 提供数据 <Context.Provider value={count}> <div> <ConA /> <button onClick={() => { setCount(count + 1) }}>+</button>//提供方修改count数据之后,使用方也会更新这个数据 </div> </Context.Provider> )}//打印结果: this is ConA app传过来的数据是:10this is ConC app传过来的数据是:10

Context如果要传递的数据,只需要在整个应用初始化的时候传递一次就可以,就可以选择在入口文件index.js里通过Provider 提供数据。

Context如果需要传递数据并且将来还需要再对数据做修改,底层组件也需要跟着一起变,就可以在顶层组件那里通过Provider 提供数据。

今天的分享就到这里啦✨\textcolor{red}{今天的分享就到这里啦✨}今天的分享就到这里啦✨

原创不易,还希望各位大佬支持一下\textcolor{blue}{原创不易,还希望各位大佬支持一下}原创不易,还希望各位大佬支持一下

🤞 点赞,你的认可是我创作的动力!\textcolor{green}{点赞,你的认可是我创作的动力!}点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!\textcolor{green}{收藏,你的青睐是我努力的方向!}收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!\textcolor{green}{评论,你的意见是我进步的财富!}评论,你的意见是我进步的财富!

本文链接地址:https://www.jiuchutong.com/zhishi/292311.html 转载请保留说明!

上一篇:La Selva生物站热带雨林树冠上的黑嘴巨嘴鸟,哥斯达黎加 (© Greg Basco/Minden Pictures)

下一篇:GNSS算法相关开源代码(含多传感器融合相关项目)(简述gnss数据处理流程)

  • 荣耀30系列有没有地震预警(荣耀30系列有没有防水防)

    荣耀30系列有没有地震预警(荣耀30系列有没有防水防)

  • kindle5.12.1是第几代(kindle5.12.2是什么版本)

    kindle5.12.1是第几代(kindle5.12.2是什么版本)

  • wifi增强器怎么连接(wifi增强器怎么安装)

    wifi增强器怎么连接(wifi增强器怎么安装)

  • 该内存不能为read(该内存不能为read,要终止程序)

    该内存不能为read(该内存不能为read,要终止程序)

  • 钉钉观看直播时长怎么计算(钉钉观看直播时长与实际不符)

    钉钉观看直播时长怎么计算(钉钉观看直播时长与实际不符)

  • 华为手机已下载的文件在哪找(华为手机已下载的更新怎么删除)

    华为手机已下载的文件在哪找(华为手机已下载的更新怎么删除)

  • oppoa11x微信带美颜功能吗(oppo微信美颜在哪里打开)

    oppoa11x微信带美颜功能吗(oppo微信美颜在哪里打开)

  • 抖音发布的视频为什么没有播放量(抖音发布的视频怎么突然没有了)

    抖音发布的视频为什么没有播放量(抖音发布的视频怎么突然没有了)

  • 华为手机竖屏改为横屏(华为怎么调竖屏)

    华为手机竖屏改为横屏(华为怎么调竖屏)

  • qq被冻结了邮箱还能上去吗(qq被冻结了邮箱怎么使用)

    qq被冻结了邮箱还能上去吗(qq被冻结了邮箱怎么使用)

  • qq号无法绑定微信怎么办(qq无法绑定微信的原因)

    qq号无法绑定微信怎么办(qq无法绑定微信的原因)

  • 怎样在手机上买票(怎样在手机上买飞机票网上订票)

    怎样在手机上买票(怎样在手机上买飞机票网上订票)

  • 荣耀v20怎么锁定后台(荣耀v20怎么锁定应用程序)

    荣耀v20怎么锁定后台(荣耀v20怎么锁定应用程序)

  • 华为nova4是水滴屏吗(华为nova6水滴屏)

    华为nova4是水滴屏吗(华为nova6水滴屏)

  • 怎么找回信任后被删除的软件(怎么找回信任后的东西)

    怎么找回信任后被删除的软件(怎么找回信任后的东西)

  • qq号注销后好友还在吗(qq号注销后好友还能看到你么)

    qq号注销后好友还在吗(qq号注销后好友还能看到你么)

  • 苹果xr怎样设置自己铃声(苹果xr怎样设置耳机)

    苹果xr怎样设置自己铃声(苹果xr怎样设置耳机)

  • 美版ipad可以在国内保修吗(美版ipad可以上外网吗)

    美版ipad可以在国内保修吗(美版ipad可以上外网吗)

  • 电话对方未接听啥意思(电话对方未接通要收费吗)

    电话对方未接听啥意思(电话对方未接通要收费吗)

  • 华为9x私密空间在哪(华为9x私密空间怎么打开)

    华为9x私密空间在哪(华为9x私密空间怎么打开)

  • 动画设置为螺旋飞入(自定义动画为旋转)

    动画设置为螺旋飞入(自定义动画为旋转)

  • qq怎么升级快(qq怎么升级快不花钱)

    qq怎么升级快(qq怎么升级快不花钱)

  • 抖音上热门的钱怎么退(抖音上热门的钱怎么退回支付宝)

    抖音上热门的钱怎么退(抖音上热门的钱怎么退回支付宝)

  • 虎扑如何升级发帖(虎扑怎样升级)

    虎扑如何升级发帖(虎扑怎样升级)

  • 小米手环3蓝牙连不上(小米手环3蓝牙连接)

    小米手环3蓝牙连不上(小米手环3蓝牙连接)

  • Windows7系统内存占用分析(win7系统内存不足怎么解决)

    Windows7系统内存占用分析(win7系统内存不足怎么解决)

  • 房地产企业增值税计算
  • 个人股权转让如何缴纳印花税
  • 期初未缴税额是什么意思
  • 结转所得税的会计分录是什么
  • 外资企业能投资国企么
  • 2019年一季度季报怎样填写
  • 工会支出发票抬头是企业名称可以吗
  • 支付退货款现金流怎么做
  • 企业外包项目如何确认收入成本配比?
  • 丢失增值税专用发票
  • 旅行社差额征税增值税申报表怎么填
  • 小微企业超过300万企业所得税
  • 年所得12万元以上的纳税人,在纳税年度终了后
  • 跨年会计分录错误
  • 对公账户转账有延迟吗
  • 小规模免征增值税政策2022
  • 固定资产暂估入账后续调整
  • 发现以前年度未做领料生产的分录怎么处理
  • 短期借款应付利息列报
  • 固定资产 出售
  • 存货计划成本法好处
  • win10电脑屏幕颜色变了怎么调到原来的
  • linux7 nfs
  • Linux下使用quota命令管理磁盘空间的实例教程
  • 冈山平原
  • php5升级到php7
  • 往来账怎么处理
  • 退货可以吗
  • vue url 参数
  • 土地价款扣除会计分录
  • 销售地下车库缴纳哪些税
  • web服务器的搭建与应用
  • php浮点数
  • 大西洋,一望无际的海面
  • 资产负债表是不是根据记账凭证生成的
  • 高新技术企业收入占比不到60%,能否享受税收优惠政策
  • 会计凭证作用的说法中不正确的是
  • vue3使用教程
  • 获取企业微信用户身份信息授权失败
  • python中文分词代码
  • 发票作废税款什么时候退
  • 畜牧业科技公司
  • phpcms api
  • phpmail
  • vuex数据持久化
  • 库房食品过期报告怎么写
  • 投资收益借贷方代表什么
  • 一般纳税人应交税费二级科目有哪些
  • 办公费用开专票可以抵扣吗
  • 承兑汇票贴现的利率
  • 公司买的材料做什么分录
  • 农产品加工会计分录
  • 产品成本归集和分配是哪一章的
  • 员工借款还款怎么做账
  • 社保补缴收滞纳金吗
  • 个税滞纳金怎么计算
  • 公司汽车维修
  • 如何发放银行贷款利息
  • 建筑行业收到工程款延期付款利息需不需要开票
  • 怎么怎么恢复
  • centos邮件服务器
  • ubuntu系统中安装微信步骤
  • win8.1删除wifi
  • xp系统电源设置在哪里
  • linux tar压缩文件命令
  • marvell 网卡驱动
  • ztree默认选中
  • android 4.2
  • shell脚本-lt
  • cad cl命令在哪里
  • angular的ngif
  • Unity的WWW类的用法整理
  • unity shader saturate
  • [置顶]马粥街残酷史
  • 使用androidx
  • 深圳企业所得税税率多少
  • 差额征税可以全部抵成本么?
  • 一般纳税人开票的税率是多少
  • 电子税务局备案财务会计制度
  • 国税总局王军简历
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设