React hooks — useCallback

277 阅读1分钟

useCallback 是 React 中的一个 hooks。

useCallback 的功能:记住当前定义的函数,并在下次组件渲染的时候返回之前定义的函数(不再使用新定义的函数),减少不必要的渲染

useCallBack 参数

  • fn

回调函数,deps参数发生改变后更新。

被 useCallBack 包裹的函数,会被重新构建并当成 useCallBack 函数的实参传入

  • deps

一个数组,表示触发回调函数的参数列表 useCallBack 的返回值是一个函数,依赖改变后更新,返回一个新的函数

用法

  • 与 useState 的用法相似,最后会返回一个函数,用一个变量保存此函数
  • 配合子组件的 shouldComponentUpdate 或者 React.memo 来使用(否则可能会出 bug,所以要尽量避免滥用 useCallBack )
  • useRef 、 useReducer 也有对应的解决方案

案例

如下代码是一个累加计数器

当 num 的值变化时,useCallback会返回一个新的回调,而不会重复创建 add 函数,从而提升了性能。

import React, { useState, useCallback } from 'react';

function count() {
  const [num, setNum] = useState(0);
  const add = useCallback(() => {
    setCount(num + 1);
  }, [num]);
  
  return (
    <div>
      <p>Count: {num}</p>
      <button onClick={add}>+</button>
    </div>
  );
}