React 魔法手册:Hooks 咒语大全

58 阅读2分钟

简言

React Hooks 是 React 16.8 引入的重要特性,它让函数组件也能拥有状态和生命周期等特性。以下是几个核心钩子函数的详细介绍:

1、useState - 维护状态

const[state,setState]=useState(initialState);
  • 作用:在函数组件中添加局部状态
  • 参数:初始状态值
  • 返回值:当前状态和更新状态的函数
  • 特点:状态更新会触发组件重新渲染,可以多次调用声明多个状态变量

2、useEffect-完成副作用操作作为异步函数来执行

useEffect(()=>{
//副作用代码
return()=>{
//清理函数
};
},[dependencies]);
  • 作用:处副作用(数据获取、订阅、手动修改DOM等)
  • 参数:副作用函数,依赖数组(可选)
  • 执行时机:默认在每次渲染后执行,依赖数组为空时只执行一次,有依赖项时依赖变化才执行一次
  • 清理函数:返回的函数会在组件卸载或下次effect执行前调用

3、useLayoutEffect-同步执行副作用

useLayoutEffect(()=>{
//副作用代码
},[dependencies]);
  • 作用:与useEffect类型,但会在所有DOM变更后同步调用
  • 执行时机:在浏览器执行绘制之前
  • 适用场景:需要同步读取DOM布局或者触发同步渲染时

4、useRef-访问DOM元素

const refContainer=useRef(initialValue);
  • 作用:访问DOM节点,保存可变值(不会触发重新渲染)
  • 特点:返回一个ref对象,其currents属性被初始化为传入的参数;修改.current不会触发组件重新渲染

5、useContext - 使用共享状态

const value = useContext(MyContext);
  • 作用:订阅React context的值
  • 参数:context对象(由React.createContext创建)
  • 返回值:当前context的值
  • 特点:避免组件多层传递props

6. useReducer - 类似Redux的状态管理

const [state, dispatch] = useReducer(reducer, initialState);
  • 作用:复杂状态逻辑管理

  • 参数

    • reducer函数:(state, action) => newState
    • 初始状态
  • 返回值:当前状态和dispatch函数

  • 适用场景:状态逻辑复杂或包含多个子值

7. useCallback - 缓存函数

const memoizedCallback = useCallback(() => {
  // 函数体
}, [dependencies]);
  • 作用:返回一个记忆化的回调函数

  • 参数

    • 内联回调函数
    • 依赖数组
  • 返回值:记忆化的函数

  • 优化场景:防止子组件不必要的重渲染

对比总结

钩子主要用途执行时机优化相关
useState状态管理渲染时-
useEffect副作用渲染后-
useContext共享状态渲染时-
useReducer复杂状态渲染时-
useMemo缓存值渲染时
useRefDOM/可变值--
useLayoutEffect副作用DOM变更后-

这些钩子函数共同构成了React函数组件的核心能力,合理使用它们可以编写出高效、可维护的函数组件。