react18【系列实用教程】useCallback —— 缓存函数 (2024最新版)

当父组件向子组件传递了函数,也会引发 memo 缓存组件失效,因为函数也是引用类型的数据,父组件重新渲染时,传给子组件的函数的内存地址也会重新生成,引发子组件重新渲染。

  const printNum = () => {
    console.log("打印 num :", num);
  };
<Child2 printNum={printNum} />

useCallback 的使用场景

父组件向子组件传递了函数,但仍想缓存子组件,则需使用 useCallback

useCallback 的语法

  • 第1个参数:传给子组件的函数
  • 第2个参数:由依赖项构成的数组,和 useMemo 类似,当依赖项发生改变时,也会触发 useCallback 内第一个参数的处理函数执行,引发子组件重新渲染!
  • 返回:被缓存的函数
import { useCallback } from "react";
const printNum = useCallback(() => {
  console.log("打印 num :", num);
}, []);

完整范例代码

src/page/Index/Father.jsx

import { useState, useCallback } from "react";
import Child1 from "./Child1.jsx";
import Child2 from "./Child2.jsx";

export default function Father() {
  console.log("渲染父组件");

  const [num, setNum] = useState(0);

  function increase() {
    setNum(num + 1);
  }

  const printNum = useCallback(() => {
    console.log("打印 num :", num);
  }, []);

  return (
    <div style={{ border: "1px solid", padding: "10px" }}>
      <h1>父组件</h1>
      <p>num的值为:{num}</p>
      <button onClick={increase}>+1</button>
      <Child1 />
      <Child2 printNum={printNum} />
    </div>
  );
}

相关推荐

  1. ReactuseCallback缓存函数)(十八)

    2024-05-16 06:34:10       29 阅读
  2. react18系列实用教程】useState (2024最新版)

    2024-05-16 06:34:10       37 阅读
  3. React@16.x(27)useCallBack

    2024-05-16 06:34:10       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-16 06:34:10       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-16 06:34:10       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-16 06:34:10       82 阅读
  4. Python语言-面向对象

    2024-05-16 06:34:10       91 阅读

热门阅读

  1. 第一个Rust程序

    2024-05-16 06:34:10       27 阅读
  2. 记一次若依项目组装树型结构数据的效率优化

    2024-05-16 06:34:10       36 阅读
  3. Python: 获取时间

    2024-05-16 06:34:10       32 阅读
  4. 《图像处理的璀璨星空:技术演进与热点聚焦》

    2024-05-16 06:34:10       35 阅读
  5. Uniapp基础面试

    2024-05-16 06:34:10       40 阅读
  6. iOS 学习资料

    2024-05-16 06:34:10       36 阅读
  7. Rust语言实现图像编码转换

    2024-05-16 06:34:10       37 阅读
  8. DB类的学习

    2024-05-16 06:34:10       34 阅读
  9. 从HTTP迁移到HTTPS:一篇全面的测试方案设计指南

    2024-05-16 06:34:10       39 阅读
  10. MyBatis的一二级缓存区别

    2024-05-16 06:34:10       32 阅读
  11. http 和 https 的区别及原理解析

    2024-05-16 06:34:10       35 阅读
  12. 阅读笔记——《代码整洁之道》ch2

    2024-05-16 06:34:10       33 阅读