位置: 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数据处理流程)

  • ipad每年什么时候出新款(ipad每年什么时候更新)

    ipad每年什么时候出新款(ipad每年什么时候更新)

  • 小爱同学怎么下载音色(小爱同学怎么下载音乐)

    小爱同学怎么下载音色(小爱同学怎么下载音乐)

  • 4.7寸苹果手机有哪几款(平果4.7寸手机)

    4.7寸苹果手机有哪几款(平果4.7寸手机)

  • 腾讯会议必须开摄像头吗(腾讯会议必须开会员才能开摄像头吗)

    腾讯会议必须开摄像头吗(腾讯会议必须开会员才能开摄像头吗)

  • 手机号多久不交费会被自动注销(手机号多久不交钱会注销吗)

    手机号多久不交费会被自动注销(手机号多久不交钱会注销吗)

  • 公网对讲机可以换卡吗(公网对讲机可以改频吗)

    公网对讲机可以换卡吗(公网对讲机可以改频吗)

  • ipadair2是什么型号(ipadair2是什么型号手机)

    ipadair2是什么型号(ipadair2是什么型号手机)

  • 序列号fd是翻新机吗(序列号f0)

    序列号fd是翻新机吗(序列号f0)

  • oppoa5是不是5g手机(oppoa5手机是什么配置)

    oppoa5是不是5g手机(oppoa5手机是什么配置)

  • ie是什么意思(ice是什么意思)

    ie是什么意思(ice是什么意思)

  • 抖音橱窗已售是什么意思(抖音橱窗已售是指自己已售吗)

    抖音橱窗已售是什么意思(抖音橱窗已售是指自己已售吗)

  • 小艺在哪里换声音(小艺能换声音吗)

    小艺在哪里换声音(小艺能换声音吗)

  • 抖音橱窗可以添加拼多多吗(抖音橱窗可以添加多少件商品)

    抖音橱窗可以添加拼多多吗(抖音橱窗可以添加多少件商品)

  • 微信怎么设置自动收钱(微信怎么设置自动添加好友)

    微信怎么设置自动收钱(微信怎么设置自动添加好友)

  • iphone11pro多少寸(iphone11pro几英寸)

    iphone11pro多少寸(iphone11pro几英寸)

  • 苹果三摄像头有什么用(苹果三摄像头有几个)

    苹果三摄像头有什么用(苹果三摄像头有几个)

  • aum一al00是什么型号(aum-al00是华为什么型号)

    aum一al00是什么型号(aum-al00是华为什么型号)

  • 苹果8现在还值得买吗(苹果8现在还值得换电池吗)

    苹果8现在还值得买吗(苹果8现在还值得换电池吗)

  • 快手多少播放量算热门(快手多少播放量算上热门)

    快手多少播放量算热门(快手多少播放量算上热门)

  • 扣扣附近的人怎么开启(扣扣附近的人怎么才能解除限制)

    扣扣附近的人怎么开启(扣扣附近的人怎么才能解除限制)

  • 苹果手机的群发功能在哪里(苹果手机的群发功能)

    苹果手机的群发功能在哪里(苹果手机的群发功能)

  • 苹果x录音功能在哪里(苹果x录音功能怎么打开)

    苹果x录音功能在哪里(苹果x录音功能怎么打开)

  • 为什么打开Win10应用商店会提示错误代码0x80070422?(为什么打开Win10虚拟器后一直在界面)

    为什么打开Win10应用商店会提示错误代码0x80070422?(为什么打开Win10虚拟器后一直在界面)

  • 【vue 项目】el-upload 上传文件以及回显照片和下载文件(vue+element-ui项目)

    【vue 项目】el-upload 上传文件以及回显照片和下载文件(vue+element-ui项目)

  • Loughrigg Tarn的日出,英国英格兰湖区安布尔塞德 (© John Finney photography/Getty Images)

    Loughrigg Tarn的日出,英国英格兰湖区安布尔塞德 (© John Finney photography/Getty Images)

  • Web 攻防之业务安全:接口未授权访问/调用测试(敏感信息泄露)(web攻防之业务安全实战指南)

    Web 攻防之业务安全:接口未授权访问/调用测试(敏感信息泄露)(web攻防之业务安全实战指南)

  • 公司税务注销流程是否要不发生业务多久
  • 红冲去年暂估的费用怎么做账
  • 送货单和收据单的区别
  • 工厂开不了发票
  • 小规模公司初期注销流程
  • 收取违约金需要什么条件
  • 城建税的征税范围是什么
  • 外贸企业当月没交税
  • 公共租赁住房折旧
  • 个税专项扣除做什么用
  • 收到保险公司赔款计入什么科目
  • 存货跌价准备转回的条件有哪些
  • 当月发票入库核销怎么算
  • 单位公积金可以拖欠多长时间缴
  • 代开专用发票缴纳的增值税需要计提吗?
  • 减免税费期末如何结转
  • 公司免费使用我的肖像权用作商业
  • 企业的公益性捐赠支出
  • 大巴车票抵扣税率
  • 企业控股情况是指
  • 商业健康保险税优码
  • 补助是按基本工资还是总工资
  • 辅助生产车间工人工资
  • 年度汇算清缴收入应该填什么
  • php中的类是什么
  • 向境外股东分配利润代扣代缴企业所得税
  • 结转损益类收入账户的余额会计分录
  • 科研的成果形式
  • vue qrcode生成二维码
  • php后端开发流程教程
  • PHP:mime_content_type()的用法_fileinfo函数
  • 其他应收款
  • php二维数组按某个键值排序
  • 企业所得税申报表模板
  • pytorch基础
  • php返回数据给ajax
  • 流动资产金额
  • pyecharts怎么用
  • js javascript
  • 购买员工宿舍用品报销
  • 基建拨款会计分录
  • 以物易物对企业有什么好处
  • 移动平均法适用范围
  • js array()
  • 软件研发主要研发啥软件
  • 一般计税增值税预缴税款怎么算
  • 经营范围变更银行变更需要什么资料
  • 国家税务总局金税四期
  • 固定资产的认定标准2022
  • 工程设备公司经营范围
  • 出售转让固定资产的账务处理
  • 承租人违约押金怎么办
  • 母子公司之间无偿划转固定资产
  • 上年度固定资产费用化了,财报怎么算
  • 房地产毛利额纳税调整
  • 其他权益工具投资公允价值变动计入什么科目
  • 退回资金怎么做账
  • 车辆上牌的费用应付多少?
  • 临时工的工资如何申报个税
  • 建筑行业项目经理的岗位职责
  • 房地产企业抵押借款
  • 认缴款和投资款区别
  • 实收资本是什么公司
  • 明细分类账表格
  • centos双网卡配置超详细
  • tvt_reg_monitor_svc.exe进程是什么
  • WebProxy.exe - WebProxy是什么进程
  • centos云服务器
  • win10 20h2怎么装
  • opensuse怎么安装软件
  • dos脚本 菜鸟教程
  • python 变参
  • [android] android开发中常用的Eclipse快捷键
  • javascriptwhile
  • html键盘监听
  • json对象结构中,关键字key必须为什么类型
  • 天河地税局局长简介
  • 国家税务总局令第52号 ,税务稽查案件办理程序规定
  • 农村复耕复产
  • 工商变更与税务变更为什么不能同步
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设