钩如何在反应中使用

  介绍

今天就跟大家聊聊有关钩如何在反应中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

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类似,都是用来保存状态,但它的不同点在于可以定义一个减速器的纯函数,来处理复杂数据。

钩如何在反应中使用