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

  • 苹果13可以分屏操作吗(苹果13可以分屏聊天吗)

    苹果13可以分屏操作吗(苹果13可以分屏聊天吗)

  • word公式编辑器在哪里(word公式编辑器怎么调出来)

    word公式编辑器在哪里(word公式编辑器怎么调出来)

  • 微博黑名单在哪里(微博黑名单在哪里找)

    微博黑名单在哪里(微博黑名单在哪里找)

  • vivox50什么时候上市(vivox50什么时候开售的)

    vivox50什么时候上市(vivox50什么时候开售的)

  • 苹果x快捷指令在哪(苹果x快捷指令nfc在哪)

    苹果x快捷指令在哪(苹果x快捷指令nfc在哪)

  • 路由表中包含的内容(路由表中包含的关键项分别是)

    路由表中包含的内容(路由表中包含的关键项分别是)

  • 华为荣耀8x有没有红外线功能(华为荣耀8X有没有)

    华为荣耀8x有没有红外线功能(华为荣耀8X有没有)

  • 网速300兆是什么意思(网速300兆是多少kbps)

    网速300兆是什么意思(网速300兆是多少kbps)

  • oppoa31是全网通吗(oppoa32全网通)

    oppoa31是全网通吗(oppoa32全网通)

  • 小米type-c耳机没反应(小米type c耳机插了没反应)

    小米type-c耳机没反应(小米type c耳机插了没反应)

  • ps怎么更新(货车gps怎么更新)

    ps怎么更新(货车gps怎么更新)

  • 淘宝图片不清晰怎么办(淘宝图片不清晰是什么原因,怎么办)

    淘宝图片不清晰怎么办(淘宝图片不清晰是什么原因,怎么办)

  • iPhone11pro有美颜功能吗(iphone11pro拍照自带美颜)

    iPhone11pro有美颜功能吗(iphone11pro拍照自带美颜)

  • web开发分为哪两种模式(web开发分为哪两个阶段)

    web开发分为哪两种模式(web开发分为哪两个阶段)

  • 电脑扫描文件怎么弄(电脑扫描文件怎么弄成文档)

    电脑扫描文件怎么弄(电脑扫描文件怎么弄成文档)

  • 小米的msa是什么软件(小米手机msa和mab)

    小米的msa是什么软件(小米手机msa和mab)

  • iphone11何时发售(苹果11啥时候发行)

    iphone11何时发售(苹果11啥时候发行)

  • iqoo是什么屏幕(iqoo是什么屏幕LCD吗)

    iqoo是什么屏幕(iqoo是什么屏幕LCD吗)

  • apple pencil和普通电容笔区别(普通的pencil和apple pencil)

    apple pencil和普通电容笔区别(普通的pencil和apple pencil)

  • 设置电话打不进来(设置电话打不进来可以打出去)

    设置电话打不进来(设置电话打不进来可以打出去)

  • 办公打印机的使用步骤(办公打印机的使用)

    办公打印机的使用步骤(办公打印机的使用)

  • 华为p30pro耳机孔在哪(华为p30pro耳机孔和充电孔是一体的吗?)

    华为p30pro耳机孔在哪(华为p30pro耳机孔和充电孔是一体的吗?)

  • 微信读书书币能干嘛(微信读书书币能提现吗)

    微信读书书币能干嘛(微信读书书币能提现吗)

  • 显卡超频有必要吗(显卡超频有必要拉显存吗?)

    显卡超频有必要吗(显卡超频有必要拉显存吗?)

  • 电脑输入法设置默认教程(电脑输入法设置搜狗输入法)

    电脑输入法设置默认教程(电脑输入法设置搜狗输入法)

  • ehSched.exe是什么进程 ehSched进程查询(ecap.exe是什么意思)

    ehSched.exe是什么进程 ehSched进程查询(ecap.exe是什么意思)

  • 进项税额转出补交税款
  • 人工费用与制造成本区别
  • 筹资现金流量净额为负说明了什么问题
  • 土地使用税退税账务处理
  • 企业政府性征地补偿款如何合法使用
  • 民非企业购买低保政策
  • 公司新装宽带怎么做账?
  • 废气处理工程会计分录
  • 企业租车费可以抵扣吗
  • 建筑企业一般纳税人提供建筑服务属于老项目
  • 装修费属于劳务费吗
  • 案例分析:实物抵债的涉税问题
  • 跨期费用审计调整分录
  • 怎么辨别是非
  • 发票认证平台登陆不了,IE不成功
  • 向投资者宣告发放股利会影响所有者权益吗
  • 总分机构异地移送
  • 银行承兑汇票如何承兑分录
  • safari浏览器开发者模式
  • 退付手续费怎么操作
  • 退还押金的账务处理流程
  • 增值税专票和普票的区别税率
  • 酒店布草洗涤赔偿怎样折旧
  • win10通讯
  • 冰上的卷羽鹈鹕,希腊凯尔基尼湖 (© Guy Edwardes/Minden Pictures)
  • yii2组件的理解
  • zencart安装教程
  • 固定资产减少的账务处理
  • 电票怎么付给别人
  • 已提足折旧固定资产改建支出 所得税怎么计算
  • vue导入动图
  • 固定资产的特征有哪些
  • elementui的表格
  • 增值税专用发票丢了怎么补救
  • python的多线程 吃cpu太厉害
  • 使用xampp建立www服务
  • 解决掉发的有效方法
  • phpcms使用教程
  • python天气数据的爬取与分析
  • mysql主要支持哪些数据类型?
  • dedecms上传视频
  • 安置房是交付的时候交钱吗
  • 年末计提哪些科目
  • 用友t3核算管理如何取消记账
  • mysql怎么防止sql注入
  • 只收加工费
  • sql server 内存管理
  • 预付房租计入长期待摊费用吗
  • 没有抄税会导致什么情况
  • 企业投资股权收益如何征税
  • 开发成本的会计科目编码
  • 分销佣金账务处理流程
  • 会计估计变更和政策变更有哪些
  • 取得抵债资产
  • 在建工程待摊支出结转
  • 出口退税申报需要手动录入什么信息呢
  • 小规模纳税人租赁不动产税率
  • 预付房租收到发票怎么写摘要
  • 电子支付支付是什么意思
  • mysql1194
  • linux mv命令详解
  • win8 防火墙
  • win双系统怎么切换
  • centos7yum安装
  • Win8.164位/32位KB3096053补丁下载 主要修复KB3069114安装问题
  • win10怎么用cmd删除文件
  • linux命令的含义
  • glrotatef函数
  • css placement
  • 将一个目录复制到另一个目录下
  • python中二维列表的定义
  • python爬虫:入门+进阶
  • Android ViewPager+Fragment滑动选项卡,tab点击选项卡
  • js中overlay
  • 彩票税率税率
  • 医院法制科工作职责
  • 河北华盛税务师事务所
  • 新疆自治区国税局郑志全
  • 山东省准生证是什么样子图片
  • 防疫物资开票免税吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设