今天就跟大家聊聊有关钩如何在反应中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
1,什么是钩?
反应钩是16.8推反应出的方法,能够让函数式组件像类式组件一样拥有状态,裁判,生命周期等属性。
2,为什么要出现钩?
函数式组件是全局当中一个普通函数,在非严格模式下这指向窗口,但是反应内部开启了严格模式,此时这指向定义,无法像类式组件一样使用状态,裁判,函数式组件定义的变量都是局部的,当组件进行更新时会重新定义,也无法存储,所以在钩出现之前,函数式组件有很大的局限性,通常情况下都会使用类式组件来进行代码的编写。
3,有哪些常用的钩?
(1) useState
使函数式组件也能保存状态的一个钩,这个钩的入参是状态的初始值,返回值是一个数组,数组里第一个参数为状态的值,第二个参数为修改状态的方法。
//,初始化 const [,,, setCount ],=, useState (0)//,更新 setCount(数+ 1)
(2) useEffect
函数式组件用来模拟生命周期的钩,可以模拟组件挂载完成,更新完成,即将卸载三个阶段,即componentDidMount, componentDidUpdate, componentWillUnmount。
useEffect的一个参数为函数,表示组件挂载,更新时执行的内容,在函数里再返回一个函数,表示组件即将卸载时调用的函数。
第二个参数为可选项,可传入数组,数组里可以为空,表示不依赖任何状态的变化,即只在组件即将挂载时执行,后续任何状态发生了变化,都不调用此钩。数组里也可以定义一或多个状态,表示每次该状态变化时,都会执行此钩。
useEffect(()=祝辞{//才能,这样模拟的是,componentDidMount },,[]) useEffect(()=祝辞{//才能,这样模拟的是componentDidMount 以及当数发生变化时执行componentDidUpdate },,[数]) useEffect(()=祝辞{ return 才能;()=祝辞{//才能,这样模拟的是,componentWillUnmount ,,} },,[])
(3) useContext
在没有钩之前,我们通常都会通过xxxContext。提供者和xxxContext。消费者的方式来传递和获取下的值,使用钩之后,传递上下文的方式不变,但子元素获取上下文的方式变得更加的简洁。
//,以前的定义方式 const CountContext =, React.createContext () ,& lt; CountContext.Provider 价值=https://www.yisu.com/zixun/{{数:10}}> <远ㄒ宓淖榧? //子元素{value=> {console.log (value.count)}}//10 //使用上下文的获取方式 const countObj=useContext (CountContext) console.log (countObj.count)//10
(4) useRef
useRef和类式组件中createRef用法比较类似,返回一个裁判对象,这个对象在函数的整个生命周期都不变,根据这个特性,有两种比较常见的用法。
①用于dom元素或者组件上,通过目前属性可以获取到dom元素或者类式组件的实例对象。需要注意的是,无论是useRef还是createRef或者是回调形式,字符串形式的裁判,都是不能直接给函数式组件定义的,因为函数式组件的这个指向定义,没有实例对象,只能通过forwardRef定义到函数式组件中的某个dom元素。
//,这样就将传递给函数式组件的ref绑定在了函数式组件内部的输入标签上 import 反应,,{useRef的不同之处是,forwardRef },得到& # 39;反应# 39;//,使用函数表达式的方式定义了一个函数式组件 const InputCom =, forwardRef((道具、,ref),=祝辞,{,, return 才能;& lt; input  ref={ref}/祝辞, }) export default  function refDemo () { ,,,const comRef =, useRef () ,,,回报(& lt; div> ,,,,,,& lt; InputCom ref={comRef}/祝辞,,,,, ,,,& lt;/div>), 以前,}>②保存一个数据,该数据如果不手动修改,它在整个生命周期中都不变
const [数的不同之处是,setCount ],=, useState (0) const prevCount =, useState(计数)//,当数发生变化时,组件更新,对计数的前一次数据进行保存 useEffect(()=祝辞{ prevCount.current 才能=,计数 },,[数])(5) useReducer
useReducer相当于是useState的升级版,作用与useState类似,都是用来保存状态,但它的不同点在于可以定义一个减速器的纯函数,来处理复杂数据。
钩如何在反应中使用