React Hooks

· 约 7 分钟读完 · 第 18 / 25 章

引入

Hooks 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。Hooks 在函数组件中提供了多种方式来管理状态和生命周期,让代码更简洁、可读性更强。

useState

useState 是一个 Hook,它可以让函数组件拥有状态。每个函数组件都可以通过 useState 来声明局部状态变量。这个状态变量的值可以在函数组件的多次渲染之间保持一致。

在这个例子中,useState 返回一个数组,第一个元素是状态变量 count,第二个元素是更新状态的函数 setCount。

useEffect

useEffect Hook 可以让你执行副作用操作,例如数据获取、订阅或手动更改 DOM。它类似于 class 组件中的 componentDidMount, componentDidUpdate 和 componentWillUnmount 方法的组合。

在这个例子中,useEffect 第二个参数是一个依赖数组,只有当数组中的值发生变化时,useEffect 中的回调函数才会执行。

useContext

useContext Hook 允许你在函数组件中订阅 React 的 Context。它使得你可以避免在组件树中逐层传递 props。

在这个例子中,useContext Hook 让 ThemedButton 组件可以直接访问到 ThemeContext 提供的主题值,而不需要通过 props 一层层传递。

useReducer

useReducer Hook 用来处理更复杂的状态逻辑,特别是当状态更新依赖于先前状态的时候。它通常用于替代 useState。

在这个例子中,useReducer 用于管理 Counter 组件的状态逻辑。reducer 函数接收当前状态和动作对象作为参数,并返回新的状态。

自定义 Hooks

自定义 Hooks 是一种复用状态逻辑的方式。自定义 Hooks 必须以 use 开头,这可以帮助 React 识别该 Hook。

在这个例子中,useFriendStatus 是一个自定义 Hook,它订阅了朋友的状态变化,并在组件卸载时取消订阅。这样,我们就可以在任何组件中使用这个逻辑。

总结

Hooks 是 React 16.8 中引入的一个重要特性,它们允许你在函数组件中添加状态和其他 React 特性。通过使用 useState, useEffect, useContext, useReducer 以及自定义 Hooks,你可以写出更加简洁、可维护的代码。Hooks 使你能够在函数组件中处理复杂的逻辑,同时保持代码的清晰和可读性。