React Hooks

Posted 遥岑.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React Hooks相关的知识,希望对你有一定的参考价值。

类组件与函数组件

React创建组件的方式有类组件和函数组件。

函数组件:

  • 纯函数组件没有状态
  • 纯函数组件没有生命周期
  • 纯函数组件没有this

类组件功能齐全,但是代码很重,组件不够轻便。若使用函数组件,又没有状态管理。于是React团队设计了React Hooks,它的本质是增强的函数组件,即在函数组件中实现状态管理

React Hooks中常用的钩子函数

不同的钩子为函数引入不同的外部功能,React Hooks约定,钩子一律使用use前缀命名
所以,自己定义的钩子都要命名为useXXX

useState()

状态钩子函数
该函数的返回值是一个数组
数组中第一个数据是一个变量,该变量接收useState函数的参数,并把这个参数作为状态的初始值。
数组中的第二个数据是一个函数,用来更新第一个变量的值(类似于类组件中的setState),该函数的命名约定为set开头,后跟第一个变量名。

//count的初始值为0
const [ count,setCount ] = useState(0);

useContext()

共享状态钩子
作用就是可以做状态的分发,在React16.X以后支持,避免了react逐层通过Props传递数据。

const HookTest = ()=> {
    //创建全局的对象AppContext 初始值为{}
    const AppContext = React.createContext({})

    //定义子组件A
    const A = ()=> {
        //解构赋值 获取全局对象AppContext的值给name
        const {name} = useContext(AppContext)
        return (
            <p>子组件A{name}</p>
        )
    }

    //定义子组件B
    const B = ()=> {
        const {name} = useContext(AppContext)
        return (
            <p>子组件B{name}</p>
        )
    }

    return (
        <AppContext.Provider value={{name:'司凤'}}>
            <A/>
            <B/>
        </AppContext.Provider>
    )
}

useReducer()

useReducer()是一个基于Redux的Action的钩子函数

useEffect()

可以用来更好的处理副作用,如异步请求等,Hooks的useEffect()也是为函数组件提供了处理副作用的钩子。
在类组件中我们会把请求放在componentDidMount里面,在函数组件中我们可以使用useEffect()。

useEffect(() => {},[array])
  • 第一个参数是要进行的异步操作
  • 第二个参数是一个数组,用来给出Effect的依赖项,只要这个数组发生变化,useEffect()就会执行。(当第二项省略不填时,useEffect()会在每次组件渲染时执行。这一点类似于类组件的componentDidMount)

以上是关于React Hooks的主要内容,如果未能解决你的问题,请参考以下文章

使用 React Hooks 编写 REST API 时如何重用代码?

React Hooks相关

React Hooks相关

React 17:错误:无效的钩子调用。 Hooks 只能在函数组件的主体内部调用

从Mixin到hooks,谈谈对React16.7.0-alpha中即将引入的hooks的理解

React 17 + Vite + ECharts 实现疫情数据可视化「03 学习 React Hooks」