React Hooks汇总

291 阅读3分钟

什么是Hooks?

在React之前,组件之间的状态共享和复用是一个比较困难的问题。React的组件化开发模式使得组件的复用变得更加容易,但是在处理一些复杂的状态逻辑时,仍然需要使用一些高阶组件、render props等技术来实现。 React Hooks 是 React 16.8 引入的一种新特性,它可以让函数式组件拥有类组件的一些状态和生命周期的能力。使用 Hooks 可以让 React 应用的代码更加简洁和易于理解。

Hooks汇总

Hook优点缺点适用场景用法
useState管理组件状态,简单易用不必要的重复操作单个状态管理const [state, setState] = useState(initialState);
useReducer管理复杂状态逻辑,适用于多个状态变量需要定义和理解额外的reducer函数复杂状态管理const [state, dispatch] = useReducer(reducer, initialState);
useContext共享全局数据,避免props层层传递只适用于共享上下文的场景,可能引起组件之间的耦合全局数据共享const value = useContext(MyContext);
useEffect执行副作用操作,灵活方便副作用函数可能在每次渲染时都会触发,需要额外的依赖管理副作用操作、数据订阅useEffect(() => { // 副作用操作 }, [dependency]);
useLayoutEffect在DOM更新之后同步执行副作用操作,获取最新的DOM信息阻塞组件渲染,潜在的性能影响需要获取最新DOM信息的副作用操作useLayoutEffect(() => { // 副作用操作 }, [dependency]);
useRef存储和访问组件中的任意值需要手动处理ref的变更获取DOM节点、存储任意值const ref = useRef(initialValue);
useMemo缓存计算值,减少不必要的计算和渲染需要额外的依赖管理,仅在计算开销较大或依赖不经常变化时才适用计算开销较大、依赖不经常变化的计算值const memoizedValue = useMemo(() => { // 计算值 }, [dependency]);
useCallback缓存回调函数,减少不必要的函数重新创建需要额外的依赖管理,仅在回调函数依赖不经常变化时才适用传递给子组件的回调函数、依赖不经常变化的回调函数const memoizedCallback = useCallback(() => { // 回调函数 }, [dependency]);
useImperativeHandle允许自定义对外暴露的实例值需要配合forwardRef使用,与组件实现耦合度较高控制组件实例的外部接口useImperativeHandle(ref, () => { // 对外暴露的实例值 }, [dependency]);
useTransition在动画切换时平滑过渡,提供更好的用户体验仅在需要动画切换时使用,与动画库集成复杂动画切换const [startTransition, isPending] = useTransition();
useDeferredValue延迟处理更新,优化性能需要额外的逻辑处理优化处理大量数据更新的性能const deferredValue = useDeferredValue(value, { timeoutMs: 1000 });
useMutableSource用于自定义数据源的数据订阅和更新需要自定义数据源的实现自定义数据源的数据管理const data = useMutableSource(source, getSnapshot, subscribe);
useSyncExternalStore与外部数据存储同步更新,实现双向绑定需要与外部数据存储进行集成与外部数据存储同步更新的场景useSyncExternalStore(store, subscribe, getSnapshot, setSnapshot);
useId自动生成唯一标识符,方便元素和组件的标识和操作需要唯一标识符的场景const uniqueId = useId();
useSuspense支持异步更新和懒加载,优化渲染体验仅在需要异步更新和懒加载时使用异步更新和懒加载const resource = useSuspense(fetchResource);
useCacheRefresh刷新缓存数据,手动触发数据更新需要手动管理缓存数据和触发刷新操作缓存数据的刷新const refreshCache = useCacheRefresh();
useOptimistic实现乐观更新策略,提升用户体验需要额外的状态管理和处理乐观更新策略const [data, updateData] = useOptimistic(initialData);
useFormStatus管理表单的状态和验证规则只适用于特定场景,不适用于所有表单需要管理表单状态和验证规则的情况const {padding} = useFormStatus();