一、React Hooks 简介
React Hooks 在 React16.8 中首度亮相,Hooks 可以让我们在 function 组件内部添加状态,不再需要使用 class 来编写组件。Hooks 不仅仅是让 React 更加简洁,而且还能让我们实现很多功能,比如 useEffect 可以让我们监听组件的生命周期,使用 state 可以让我们自定义组件的状态。 React Hooks 最大的好处就是让 function 组件拥有了同 class 组件一样的能力,而且使用起来更加简单方便。React Hooks 包括了几个核心特性:- useState: 声明和使用 state 值
- useEffect: 相当于 componentDidMount, componentDidUpdate 和 componentWillUnmount 这三个生命周期的组合
- useContext:动态获取 React context
- useReducer: 在组件中使用Reducer
- useCallback和useMemo,用作性能优化
- useRef: 声明ref
- useImperativeHandle: 给自定义组件暴露组件内函数
- useLayoutEffect:在DOM更新时同步执行副作用
二、React Hooks 原理
正如上面所提到的,Hooks 的出现主要是为了解决 function 组件的痛点,让function 组件拥有类似 class 组件的能力。那么想要知道 Hooks 的原理,首先我们需要知道 class 组件是怎么实现的。在 class 组件内部,有一个 state 属性,用来存放组件内部状态的值,state 的值改变后,重新渲染组件。 如果是function 组件,我们知道这个组件中没有state属性,也就无法直接存储组件内部状态的值,那么在function 组件中为什么能使用 Hooks 了呢? 这是因为React16.8的钩子中增加了一些特殊的钩子,这些钩子类似于在 class 组件中的 state 属性,可以用来存储组件状态,并且修改这些钩子的值会触发组件的重新渲染。 useState 钩子是最常用的一个,它通过数组的方式来存储 state 值,返回值是一个长度为 2 的数组,第一个值是状态的当前值,第二个值是用于更新状态的函数。每当状态改变时,useState 都会重新渲染组件。三、React Hooks 实践
下面是使用 React Hooks 实现一个计数器应用,代码如下所示:import React, { useState } from "react"; function Count() { const [count, setCount] = useState(0); return (在上面的例子中,使用 useState 钩子来声明了一个名为 count 的状态变量,初始值为 0。当用户单击按钮时,将调用 setCount 函数来更新 count 的值。); } // 将组件导出 export default Count;You clicked {count} times