首页 > 其他分享 >React中使用usePrevious的意义是什么,为啥要用它

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

时间:2024-07-13 09:26:03浏览次数:19  
标签:option usePrevious prevClickEvent React onClick 为啥 chartInstance prevOption

usePrevious钩子

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 可以提升性能,并确保在每次渲染时都有上一次的状态值可供比较。这对于需要比较前后值的场景非常有用,例如图表的更新和事件监听器的添加。

举例说明

  // 使用 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 值与上一次的值是否相等。如果相等,则表示没有发生改变,不需要更新图表。通过比较前后值,可以避免不必要的更新和重复渲染,提高代码的性能和效率。

标签:option,usePrevious,prevClickEvent,React,onClick,为啥,chartInstance,prevOption
From: https://blog.csdn.net/weixin_43883615/article/details/140209171

相关文章

  • 日常工作中需要避免的9个React坏习惯
    前言React是前端开发领域中最受欢迎的JavaScript库之一,但有时候在编写React应用程序时,可能陷入一些不佳的习惯和错误做法。这些不佳的习惯可能导致性能下降、代码难以维护,以及其他问题。在本文中,我们将探讨日常工作中应该避免的9个坏React习惯,并提供相关示例代码来说明这些问题以......
  • 日常工作中需要避免的9个React坏习惯
    前言React是前端开发领域中最受欢迎的JavaScript库之一,但有时候在编写React应用程序时,可能陷入一些不佳的习惯和错误做法。这些不佳的习惯可能导致性能下降、代码难以维护,以及其他问题。在本文中,我们将探讨日常工作中应该避免的9个坏React习惯,并提供相关示例代码来说明这些......
  • 【服务器搭建】为啥虚拟主机不能用IP直接访问?
    需求直接用IP访问了自己在线上的网站,结果发现被拒绝❓因为,IP映射的是一整台服务器,而服务器上可以部署的的服务是多种多样的。除了web网站服务,还可能有ftp文件传输服务,mail邮箱服务等。这时仅仅给出IP是不够的,需要在IP后添加端口号作进一步区分。当然,如果用浏览器访问的话,只输......
  • react 实现前端发版监测
    先说下前端发版流程1.前端打包输出产物/dist文件2.删除远程服务下打包的旧代码3.将打包参物/dist文件copy到远程服务器目录4.重启服务器问题1在步骤2,3,4中用户访问目标服务器会报JS错误,正常情况打开网页的控制面板会看下报错信息`Failedtofetchdynamicallyimp......
  • 适用于react、vue菜单格式化工具函数
    场景在一个动态菜单场景中,你向接口获取树形菜单,但最后拿到的树未能达到你的预期,这个时候就需要手写递归重新处理这颗树适用于react、vue菜单格式化工具函数包含功能1.当前路由是否存在返回按钮判断逻辑:只要存在左侧可点击的菜单都不具备返回按钮,其他则具有返回按钮2.错误......
  • 图标组件的封装与管理(React/svg)
    一概要1.1背景最近在项目中使用了很多从iconfont拿到的图标。使用官网的导入方法有些繁琐,也不易管理。于是捣鼓了一下...1.2目的能够像组件一样使用,具有规范性。比如暴露一个type属性,根据不同的type使用不同的主题色。高自由度。可以直接在项目中管理图标,只需要处理从其......
  • 界面组件Kendo UI for React 2024 Q2亮点 - 生成式AI集成、设计系统增强
    随着最新的2024年第二季度发布,KendoUIforReact为应用程序开发设定了标准,包括生成式AI集成、增强的设计系统功能和可访问的数据可视化。新的2024年第二季度版本为应用程序界面提供了人工智能(AI)提示,从设计到代码的生产力增强、可访问性改进、一系列新的UI组件等。KendoUI致力......
  • react hooks实现对元素拖拽及鼠标滚轮缩放
    page.jsximport'./index.less';import{useDrag,useZoom}from'./hooks';constDragZoom=()=>{const{handleMouseDown,handleMouseMove,handleMouseUp}=useDrag();const{handleWheel,scale}=useZoom();re......
  • [email protected](53)[email protected](2)- action
    目录1,特点1.1,payload1.2,type1.3,bindActionCreators1,特点是一个平面对象(plain-object)。换句话说,就是通过字面量创建的对象,它的__proto__指向Object.prototype。该对象有2个属性:constaction={ type:'add', payload:3}1.1,payload表示额外需要传递的附......
  • 使用Java9 Flow API进行Reactive Programming
    importjava.util.concurrent.Flow;importjava.util.concurrent.Flow.Publisher;importjava.util.concurrent.Flow.Subscriber;publicclassReactiveExample{publicstaticvoidmain(String[]args){//创建一个发布者,发布一系列的数字Publisher......