React 中的 useCallback 钩子函数

这篇具有很好参考价值的文章主要介绍了React 中的 useCallback 钩子函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、useCallback 钩子函数简要说明

useCallback 钩子函数有点像 useMemo 一样可以备份信息,而 useCallback 只是备份函数,除非某些参数发生变化,否则他不会重新运行其中的代码,

2、useCallBack 例子

// 父级组件
const UseCallBackDemo: React.FC = () => {
  const [num, setNum] = useState<number>(0);
  const [dark, setDark] = useState<boolean>(false);

  const getList = () => {
    return [num, num + 1, num + 2];
  };

  const themeStyles = {
    backgroundColor: dark ? "black" : "white",
    color: dark ? "white" : "black",
  };

  return (
    <div style={themeStyles}>
      <input
        value={num}
        onChange={(e) => {
          setNum(+e.target.value);
        }}
      ></input>
      <button
        onClick={() => {
          setDark((prve) => (prve = !prve));
        }}
      >
        改变主题
      </button>
      <UseCallBackList lists={getList} />
    </div>
  );
};

// UseCallBackList 组件
type params = {
  lists: Function;
};

const UseCallBackList: React.FC<params> = ({ lists }) => {
  const [list, setList] = useState<any>([]);

  useEffect(() => {
    console.log("params change");
    setList(lists());
  }, [lists]);

  return list.map((item: number, index: number) => <p key={index}>{item}</p>);
};

出现的问题:运行上述代码后,当我们在输入框中输入数字后,再去查看控制台的日志我们可以看到打印出了params change的信息,这就表示UseCallBackList组件的useEffect钩子监听到了数据的改变,但是当我们点击改变主题按钮的时候,控制台也打印出了params change的信息。

这是因为每次渲染应用程序组件时都会重新创建应用程序组件内部的 getList 函数,因此每次修改输入框中的值后都会重新创建该函数,所以当此函数传递给UseCallBackList组件时都会是新函数,这样每次点击以后都会重新触发。

使用 useCallBack 钩子解决

const getList = useCallback(() => {
  return [num, num + 1, num + 2];
}, [num]);

这样修改后,上述的问题就会解决。但是我们发现useCallBack函数语法和useMemo函数一样,但是他们还是存在不同,useCallBack备份的是函数,而useMemo是备份函数处理后的结果,所以 useMemo 是不能传递参数的。

就比如上述例子中我们可以在useCallBack中传入增量,而在子组件调用 getList 函数时,就可以传入变量值,具体的例子如下:文章来源地址https://www.toymoban.com/news/detail-708610.html

// 父级组件
const getList = useCallback(
  (increment: number) => {
    return [num + increment, num + 1 + increment, num + 2 + increment];
  },
  [num]
);

// UseCallBackList 组件
useEffect(() => {
  console.log("params change");
  setList(lists(2));
}, [lists]);

到了这里,关于React 中的 useCallback 钩子函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • react钩子函数理解

    React钩子(Hooks)是React 16.8版本引入的一种特性,用于在无需编写类组件的情况下,在函数组件中添加状态管理和其他React特性。React钩子解决了函数组件在处理状态、副作用和代码复用方面的一些问题,使得代码更加清晰、可读和可维护。 React钩子提供了一些特定的函数,可

    2024年02月13日
    浏览(23)
  • react钩子函数

    React组件的生命周期包括多个阶段和方法,用于在组件不同的生命周期时执行特定的操作。以下是React类组件中常见的生命周期方法: 挂载阶段(Mounting Phase): constructor:组件实例化时调用,用于初始化state和绑定事件处理函数。 static getDerivedStateFromProps:根据传入的props更新

    2024年02月15日
    浏览(27)
  • React钩子函数之forwardRef

    React是一个非常流行的JavaScript库,用于构建用户界面。它提供了一种简单而强大的方式来管理组件的状态和行为。其中一个非常有用的功能是钩子函数,它们允许我们在组件的生命周期中执行代码。 在本文中,我们将探讨React的一个重要钩子函数——forwardRef。它可以帮助我们

    2024年02月11日
    浏览(25)
  • React钩子函数之useRef的基本使用

    React钩子函数中的useRef是一个非常有用的工具,它可以用来获取DOM元素或者保存一些变量。在这篇文章中,我们将会讨论useRef的基本使用。 首先,我们需要知道useRef是如何工作的。它返回一个可变的ref对象,这个对象可以在组件的整个生命周期中被访问。当我们需要获取DOM元

    2024年02月10日
    浏览(25)
  • React钩子函数之useDeferredValue的基本使用

    在React中,使用钩子函数可以方便地管理组件的状态和副作用。useDeferredValue是React 18中新引入的钩子函数之一,它可以帮助我们优化渲染性能,让组件更加流畅。 useDeferredValue的作用是将一个值延迟更新。这个值可以是状态、属性或其他变量。当这个值发生改变时,React并不会

    2024年02月10日
    浏览(29)
  • React钩子函数之useEffect,useLayoutEffect与useInsertionEffect的区别

    React钩子函数在React开发中扮演着非常重要的角色。其中,useEffect、useLayoutEffect和useInsertionEffect是三个常用的钩子函数,它们的作用虽然有些相似,但是也存在一些区别。在本文中,我们将详细介绍这三个钩子函数的区别,以及它们在React开发中的应用。 首先,我们来了解一下

    2024年02月11日
    浏览(29)
  • [React]useMemoizedFn和useCallback对比

    useMemoizedFn文档地址:https://ahooks.js.org/zh-CN/hooks/use-memoized-fn 在 React 中,自定义的 Hooks 内部的函数在以下常见的几种情况下会被重新赋值,导致更新引用: 组件重新渲染: 当组件重新渲染时,Hooks 内部的函数会被重新执行,从而导致函数的重新赋值和更新引用。 这意味着每

    2024年02月14日
    浏览(33)
  • React的hooks---useCallback & useMemo

    useCallback  和  useMemo  结合  React.Memo  方法的使用是常见的性能优化方式,可以避免由于父组件状态变更导致不必要的子组件进行重新渲染 useCallback useCallback 用于创建返回一个回调函数,该回调函数只会在某个依赖项发生改变时才会更新,可以把回调函数传递给经过优化的

    2024年02月15日
    浏览(26)
  • React Hook之useCallback 性能优化

    上文 对比之前的组件优化说明React.memo的作用我们说了 React.memo的妙用 但是 它却并非万能 我们来看这个情况 我们子组件代码编写如下 这里 我们接收了父组件 props中的一个 dom1funt 函数 然后点击dom1funt按钮 触发这个dom1funt 然后 父组件代码编写如下 父组件 我们定义了这个传给

    2024年02月11日
    浏览(44)
  • 【1024用代码改变世界】useMemo 和 useCallback|React.memo使用场景

    欢迎来到我的博客 📔博主是一名大学在读本科生,主要学习方向是前端。 🍭目前已经更新了 【Vue】、【React–从基础到实战】、【TypeScript】等等系列专栏 🛠目前正在学习的是🔥 R e a c t / 小程序 React/小程序 R e a c t / 小程序 🔥,中间穿插了一些基础知识的回顾 🌈博客主

    2024年02月02日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包