React中使用usePrevious的意义是什么,为啥要用它

usePrevious钩子

c 复制代码
export function usePrevious<T>(value: T): T | undefined {
  const ref = useRef<T>();

  useEffect(() => {
    ref.current = value;
  }, [value]);

  return ref.current;
}

注:更多好用的性能钩子网站推荐:https://react-hooks-library.vercel.app/core/usePrevious

原因

usePrevious 是一个自定义 Hook,用于记录上一次的状态,以便在下一次渲染时进行比较。使用 usePrevious 可以提升性能,并确保在每次渲染时都有上一次的状态值可供比较。这对于需要比较前后值的场景非常有用,例如图表的更新和事件监听器的添加。

举例说明

c 复制代码
  // 使用 usePrevious 钩子函数来记录上一次的 option 和 onClick 值
  const prevOption = usePrevious(option);
  const prevClickEvent = usePrevious(onClick);
    useEffect(() => {
      // ...省略部分逻辑   
      let chartInstance: ECharts | null = null;
      // 如果 option 或 onClick 值发生变化,则重新渲染
      try {
        if (!isDeepEqual(prevOption, option, ["formatter"])) {
          chartInstance.setOption(option);
        }
        if (onClick && typeof onClick === "function" && onClick !== prevClickEvent) {
          chartInstance.on("click", onClick);
        }
      } catch (error) {
        chartInstance && chartInstance.dispose();
      }
    }
  }, [option, onClick, prevOption, prevClickEvent]);

如上面代码,prevOption 和 prevClickEvent 使用 usePrevious 自定义 Hook 来存储前一个值的变量,作用是比较当前的 option 和 onClick 值与上一次的值是否相等。如果相等,则表示没有发生改变,不需要更新图表。通过比较前后值,可以避免不必要的更新和重复渲染,提高代码的性能和效率。

相关推荐
zwjapple5 小时前
docker-compose一键部署全栈项目。springboot后端,react前端
前端·spring boot·docker
像风一样自由20207 小时前
HTML与JavaScript:构建动态交互式Web页面的基石
前端·javascript·html
伍哥的传说8 小时前
React 各颜色转换方法、颜色值换算工具HEX、RGB/RGBA、HSL/HSLA、HSV、CMYK
深度学习·神经网络·react.js
aiprtem8 小时前
基于Flutter的web登录设计
前端·flutter
浪裡遊8 小时前
React Hooks全面解析:从基础到高级的实用指南
开发语言·前端·javascript·react.js·node.js·ecmascript·php
why技术8 小时前
Stack Overflow,轰然倒下!
前端·人工智能·后端
GISer_Jing8 小时前
0704-0706上海,又聚上了
前端·新浪微博
止观止9 小时前
深入探索 pnpm:高效磁盘利用与灵活的包管理解决方案
前端·pnpm·前端工程化·包管理器
whale fall9 小时前
npm install安装的node_modules是什么
前端·npm·node.js
烛阴9 小时前
简单入门Python装饰器
前端·python