React Hooks 教程之 useMemo&useCallback

本文介绍了React Hooks中的useMemo和useCallback,它们用于优化组件性能。useMemo通过缓存计算结果,仅在依赖项改变时重新计算,避免不必要的重渲染。useCallback则对函数进行记忆化,确保在依赖不变时返回相同的函数引用,减少子组件的比较开销。通过示例代码,展示了这两个Hooks如何工作,并解释了在实际开发中如何利用它们提高应用性能。
摘要由CSDN通过智能技术生成

useMemo

useMemo 用于做性能优化,Memo 是 memoized(记忆)的简写

useMemo 返回的是一个缓存的值,可以避免其在组件更新时就被重新计算,而是在它的依赖项改变时才重新计算

下面来看示例,将 App.tsx 文件内容替换为下面的代码:

import React from "react";
import "./App.css";

const App: React.FC = () => {
    const [count, setCount] = React.useState(0);
    const [countMemo, setCountMemo] = React.useState(0);

    const getCount = () => {
        console.log("getCount");
        return count;
    };

    const getCountMemo = React.useMemo(() => {
        console.log("getCountMemo");
        return countMemo;
    }, [countMemo]);

    return (
        <>
            <h1>count:{getCount()}</h1>
            <button onClick={() => setCount((count) => count + 1)}>Add Count</button>
            <h1>countMemo:{getCountMemo}</h1>
            <button onClick={() => setCountMemo((countMemo) => countMemo + 1)}>Add CountMemo</button>
        </>
    );
};

export default App;

点击 Add Count ,可以看到日志打印了多次 getCount,没有 getCountMemo

点击 Add CountMemo ,可以看到每次都打印了 getCount 和 getCountMemo

对比可得,getCountMemo 只有依赖项变化,才会重新计算缓存值,而 getCount 在每次页面重新渲染时,都会重新执行

举一个实际的例子,比如现在父组件传给子组件属性 A、B、C,子组件需要根据 A 计算求出 AA

如果写个普通函数计算,那么每次子组件重新渲染时都会重新计算,比如 B 和 C 改变也会重新计算 A

这时就可以用 useMemo,依赖项写成 A,那么只有 A 改变时才去计算 AA

useCallback

useCallback(fn, deps) 相当于 useMemo(() => fn, deps)

可见,useCallback 就是 useMemo 针对函数的特定写法

至于为什么要多此一举设计个 Hook 呢,我猜是官方为了更好的语义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值