react函数组件常用的几个钩子函数useState、useEffect、useRef、useCallback

目录

一、react框架

二、react函数组件常用的Hook

一、useState

1.定义:

2.语法:

二、useEffect

1.定义:

(1).什么是副作用?

(2).常见的副作用

(3).useEffect怎么获取真实的dom节点? 

2.语法:

三、useRef

1.定义:

2.ref的拿取:callbackRef

3.ref的使用步骤

四、useCallback

五、其它

(一)、useState和useEffect的相同点: useState 和 useEffect 支持写多个

(二)、react函数组件在页面组件中,发起网络请求的方式:

(三)、vue框架有虚拟dom,react框架有虚拟dom吗?

(四)、react框架的类组件和函数组件的区别?官方更推荐哪种写法?


一、react框架

react框架包括包括两大类:类组件+函数组件。

  • 类组件构成:constructor+自定义方法。调用方法通过this.方法名()。constructor(super+state)构造器里面必有super字段。render()方法里面写页面布局。
  • 函数组件构成:各种钩子函数+return()方法里面写页面布局。钩子函数是use开头的系列。

二、react函数组件常用的Hook

函数组件常用的钩子函数useState、useEffect、useRef、useCallback

一、useState

1.定义:

useState是react自带的一个hook函数,它的作用是用来声明状态变量。

写法如下:

const [ count , setCount ] = useState(0);

详细解释:在项目中,我们通过react-redux 或者dva数据存储框架进行全局声明并保存state中的数据。可是如果我们想在当前操作的index.tsx或者index.jsx中使用state,可以通过useState()钩子函数进行声明某一个当前页面的state数据状态。

2.语法:


const [ count , setCount ] = useState(0);

1.useState的详细介绍:
useState(params) params是可以任意设置的 第一个参数的初始值 。设置数据类型以及自定义初始值
2.useState的两个参数的详细介绍:
count 是第一个参数解构出的第一个参数。是初始值 
setCount 是第二个参数 是一个函数。 用来设置更改count 的一个函数

二、useEffect

1.定义:

(1).什么是副作用?

​ 副作用是相对于主作用来说的,一个函数除了主作用,其他的作用就是副作用。对于 React 组件来说,主作用就是根据数据(state/props)渲染 UI,除此之外都是副作用(比如,手动修改 DOM)。

写法如下:

useEffect(() => {},[])

(2).常见的副作用
  • 数据请求 ajax发送
  • 手动修改dom
  • localstorage操作
(3).useEffect怎么获取真实的dom节点? 

解决思路:使用useRef()

详细解释:useEffect在页面组件中会渲染两次,根据react框架的设计者的设定,无法在初次渲染中拿到DOM(真实的Dom节点),不能通过document.getElementByID('#id名')这种方式获取真实的dom节点。 

2.语法:

useEffect函数的作用就是为react函数组件提供副作用处理的!


useEffect(() => {},[])

1.useEffect的两个参数的详细介绍:
接受2个参数,第一个是函数,第二个是数组
2.useEffect的第二个参数的详细介绍:
(1). 如果第二个参数数组为空: 只有第一次渲染。 它类比生命周期就是componentDidMount 
(2).如果二个参数数组不为空: 类比监听,只要里面的设置的值改变,它就渲染。 它类比生命周期就是componentDidUpdate 
3.useEffect的第一个参数的详细介绍:
(1).常用:在第一个参数内部定义副作用的具体操作。
(2).卸载组件,卸载副作用,包括定时器、网络请求等异步任务,以此达到减少耗能。
useEffect 内部 最外层 支持return () => 相当于 componentWillUnmount 卸载 当离开当前组件的时候触发 并且 每次更新都触发。

三、useRef

1.定义:

使用useRef获取Dom元素,可以再useEffect中立马使用。

写法如下:

const myRef = useRef()

2.ref的拿取:callbackRef

const myRef = useRef()  //声明一个ref,自定义命名为myRef

myRef.current  //通过自定义命名.current,可以拿到此节点

通过callbackRef,在组件挂载后,操作该dom。会在真实Dom生成时执行。使用callbackRef,使用它是通过使用回调函数的方式获取ref,进而保存使用。

3.ref的使用步骤

1.首先声明;

2.其次,通过自定义命名.current获取值,或者更改值;

3.最后,在html页面布局中,通过ref={自定义命名}绑定真实的dom节点。

核心代码如下: 


const myRef = useRef()
myRef.current = 赋值
render/return (...)
<div ref={myRef}> 
</div>

四、useCallback

使用useCallback来包装函数

具体解释:不是为了性能优化。而是为了不生成新的回调函数,让diff对比时发现差异,不会 再次执行回调。

五、其它

(一)、useState和useEffect的相同点: useState 和 useEffect 支持写多个

案例省略

(二)、react函数组件在页面组件中,发起网络请求的方式:

在项目中,结合dva,在页面组件中发起网络请求。

 核心代码,如下所示:


useEffect(() => {函数},[])
{dispatch({参数})}
{type:'model模块名/某一个方法',  //namespace如果在model外调用,需要添加。
 payload:{}  //写法:state中定义的属性:属性值。需要传递的信息。
}

(三)、vue框架有虚拟dom,react框架有虚拟dom吗?

react框架有虚拟dom的概念,并且是它最先提出来的!

(四)、react框架的类组件和函数组件的区别?官方更推荐哪种写法?

官方更加推荐函数组件的写法,其衍生很多内置的Hook,以达到便于开发,便于码农书写代码。

  • 类组件有生命周期这个说法
  • 函数组件没有生命周期这个说法

react函数组件没有生命周期,但是用法可以类比到生命周期去理解。参考链接如下:react函数组件没有生命周期

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
useStateReact Hooks提供的一个函数,用于在函数组件中声明和使用状态。它接受一个初始值作为参数,并返回一个包含当前状态和更新状态的数组。useState的作用类似于类组件中的this.state和this.setState方法,但是在函数组件中使用更加简洁方便。 useEffect也是React Hooks提供的一个函数,用于在函数组件中执行副作用操作,比如订阅事件、发送网络请求、操作DOM等。它接受两个参数,第一个参数是一个回调函数,用于执行副作用操作,第二个参数是一个依赖数组,用于指定何时重新执行副作用操作。useEffect的作用类似于类组件中的生命周期方法,比如componentDidMount、componentDidUpdate和componentWillUnmount。 useCallback也是React Hooks提供的一个函数,用于在函数组件中缓存回调函数。它接受一个回调函数和一个依赖数组作为参数,并返回一个经过缓存的回调函数useCallback的作用是在依赖数组不变的情况下,避免不必要的函数重新创建,提高性能。 综上所述,useState用于声明和使用状态,useEffect用于执行副作用操作,而useCallback用于缓存回调函数。它们都是React Hooks提供的函数,可以在函数组件中方便地使用。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [搞懂React Hooks之 useState, useCallback, useEffect, useRef ,useMemo和useEffect](https://blog.csdn.net/qq_27401917/article/details/116699141)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [学习记录431@reactuseStateuseEffectuseCallback](https://blog.csdn.net/weixin_44663675/article/details/119121498)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值