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

简介: 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>
  );
}

目录
相关文章
|
4月前
|
前端开发 开发者
React 函数组件与类组件对比
【10月更文挑战第4天】本文详细比较了React中的函数组件与类组件。函数组件是一种简单的组件形式,以纯函数的形式返回JSX,易于理解与维护,适用于简单的UI逻辑。类组件则是基于ES6类实现的,需要重写`render`方法并能利用更多生命周期方法进行状态管理。文章通过示例代码展示了两者在状态管理与生命周期管理上的差异,并讨论了常见的问题如状态更新异步性与生命周期管理的复杂性,最后给出了相应的解决方法。通过学习,开发者可以根据具体需求选择合适的组件类型。
112 8
|
3月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
4月前
|
缓存 NoSQL Java
springboot的缓存和redis缓存,入门级别教程
本文介绍了Spring Boot中的缓存机制,包括使用默认的JVM缓存和集成Redis缓存,以及如何配置和使用缓存来提高应用程序性能。
161 1
springboot的缓存和redis缓存,入门级别教程
|
4月前
|
前端开发 JavaScript CDN
React 教程
10月更文挑战第6天
68 3
|
5月前
|
Web App开发 前端开发 测试技术
react18基础教程系列--安装环境及packagejson文件分析
react18基础教程系列--安装环境及packagejson文件分析
|
5月前
|
前端开发 JavaScript 区块链
react18函数组件+antd使用指南-使用代码集合以及报错记录汇总
本文介绍了多个React开发中常见的问题及其解决方案,包括但不限于:1)`useForm`实例未连接到任何`Form`元素的警告及解决方法;2)监听页面滚动事件的实现方式;3)React 18与antd 5.8.6中定制主题的方法;4)React结合antd 4.x版本自定义主题色的步骤;5)解决`ResizeObserver loop`相关报错的技巧;6)处理React设计表单时遇到的CDN资源加载失败问题;7)解决onClick事件传参问题;8)修复类型错误等。每部分均提供详细分析与实用代码示例,帮助开发者快速定位并解决问题。
94 3
|
5月前
|
XML JavaScript 前端开发
学习react基础(1)_虚拟dom、diff算法、函数和class创建组件
本文介绍了React的核心概念,包括虚拟DOM、Diff算法以及如何通过函数和类创建React组件。
54 3
|
5月前
|
缓存 前端开发
React中函数式Hooks之memo、useCallback的使用以及useMemo、useCallback的区别
React中的`memo`是高阶组件,类似于类组件的`PureComponent`,用于避免不必要的渲染。`useCallback` Hook 用于缓存函数,避免在每次渲染时都创建新的函数实例。`memo`可以接收一个比较函数作为第二个参数,以确定是否需要重新渲染组件。`useMemo`用于缓存计算结果,避免重复计算。两者都可以用来优化性能,但适用场景不同:`memo`用于组件,`useMemo`和`useCallback`用于值和函数的缓存。
136 1
|
5月前
|
前端开发
react学习(22)高阶函数和函数柯里化
react学习(22)高阶函数和函数柯里化
|
6月前
|
前端开发 JavaScript
React 中的函数组件和类组件
【8月更文挑战第31天】
89 0