你真正需要的React Hooks:实用指南

2019年引入的React Hooks已成为编写React组件的标准方式。API有十多个钩子,但日常开发需要熟悉的不到六个。以下是实用指南。

useState

本地组件状态的基础钩子。const [value, setValue] = useState(initialValue)。调用setValue更新状态;React重新渲染组件。对于不相关的值,倾向于多个useState调用而非单个对象状态——更容易理解,性能更好。对于复杂的状态转换,useReducer优于通过useState的嵌套状态更新。

useEffect

在每次渲染后(默认)或只在特定依赖变化时(传入依赖数组)运行副作用。常见用途:在组件挂载时获取数据、建立订阅、手动操作DOM。清理函数(return () => cleanup())在组件卸载或下一次效果运行前执行。依赖数组中缺少依赖是React代码中最常见的微妙bug来源。

useContext

读取组件树上Context Provider的值。替代prop drilling(通过多个组件层传递props)。用createContext创建上下文,用Provider包装应用或子树,在内部任意位置用useContext消费。性能注意:上下文值变化时,所有消费该上下文的组件都会重新渲染——对变化频率不同的值使用独立上下文。

useRef

两个主要用途:持有不触发重新渲染的可变值(用于追踪前一个值、存储定时器),以及直接访问DOM元素(const inputRef = useRef();将inputRef传给ref属性;通过inputRef.current访问)。与状态不同,改变ref不会重新渲染组件。

useMemo和useCallback

分别记忆值和函数以避免不必要重新计算的优化钩子。当计算真正昂贵时(过滤/排序大数组)使用useMemo。当需要稳定的函数引用时(用于传递给优化的子组件或其他钩子的依赖)使用useCallback。不要过早使用这些——React默认很快;只在测量到性能问题时才优化。

上一篇 React Hooks You Actually Need: A Practical Guide
下一篇 Poland from Germany: Kraków, Warsaw, and the Wrocław Alternative