React useMemo 实际开发使用小结

这篇具有很好参考价值的文章主要介绍了React useMemo 实际开发使用小结。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

React useMemo 实际开发使用小结,react.js,前端,前端框架,javascript,antd

基本原理

useMemo 的原理是基于 memoization 技术。当你使用 useMemo 时,它会在组件渲染过程中缓存函数的计算结果,并在下一次渲染时,仅在依赖项(dependencies)发生变化时重新计算。如果依赖项没有发生变化,则直接返回之前缓存的结果,避免不必要的重复计算。

在组件初次渲染时,useMemo 会执行计算函数,并将其返回值存储在内部的缓存中。

在下一次组件渲染时,useMemo 会检查依赖项数组中的每个元素是否与上一次渲染时的对应元素相同。如果依赖项数组中有任何一个元素发生了变化,useMemo 会重新执行计算函数,并更新缓存的结果。

如果依赖项数组中的所有元素在下一次渲染时与上一次渲染时的对应元素都相同,则 useMemo 将直接返回上一次缓存的结果,避免不必要的重复计算。

入参

useMemo 接受两个参数:一个是计算函数(通常是一个匿名函数),另一个是依赖项数组。

jsx

const memoizedValue = useMemo(() => {
  // 计算函数的逻辑
  // ...
}, [dependency1, dependency2, ...]);

使用场景

  • 在实际开发中,感觉 useMemo 主要用于下面几种情况:
    • 用于缓存值,比如这个值需要进行复杂的格式化函数处理,比如后端接口的数据结构需要进行一系列函数的处理从而能被前端使用,每次这个值变化就调用这个格式化函数处理得到可用的值。
    • 缓存一些数组,这个数组用于可以用于一些动态变化的组件,比如表格的列,下拉框的选项,form表单的字段路径
    • 缓存一些复杂 react 组件
    • 缓存路由的 url 筛选项改变引起 url 变化
  const drawer = useMemo(
    () => (
      <ErrorBoundary
        fallback={<div>xxx</div>}
        onError={() => message.error('xxx')}
      >
        <ClickxxxContainer>
          <TempRulexxx model={model} />
          <Drawer model={model} />
        </ClickxxxContainer>
      </ErrorBoundary>
    ),
    [model],
  )
  return [model, drawer]
}

使用 useMemo 的场景包括:

  • 计算昂贵的函数,避免在每次渲染时都重新计算。
  • 优化子组件的性能,避免子组件因为父组件的重新渲染而不必要地重新渲染。
  • 缓存对外部变量的依赖,避免闭包中的函数因为外部变量的变化而重新定义。

注意

尽管上面说了很多 useMemo 的好处,但是并不是使用越多越好的
官方文档也说了:请注意,尽管 useMemo 可以提高性能,但不应滥用它。只有在确实有计算性能问题,并且计算结果具有稳定的依赖项时,才应该使用 useMemo。过度使用 useMemo 可能会导致代码复杂性增加,不利于维护和理解。文章来源地址https://www.toymoban.com/news/detail-599769.html

到了这里,关于React useMemo 实际开发使用小结的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • React核心原理与实际开发

    学习目标 React是啥? 官方定义:将前端请求获取到的 数据 渲染为 HTML视图 的 JavaScript库 。 直接创建react,使用初始化会创建package.json 再安装 使用纯JS创建ReactDOM(元素) React.createElement()方法使用不是很灵活,知道就好; ReactDOM.render()方法渲染react元素很重要!!!使用起来

    2024年02月07日
    浏览(41)
  • 如何使用前端框架(React、Angular、Vue.js等)?该如何选择?

    聚沙成塔·每天进步一点点 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而

    2024年02月07日
    浏览(60)
  • React的hooks---useCallback & useMemo

    useCallback  和  useMemo  结合  React.Memo  方法的使用是常见的性能优化方式,可以避免由于父组件状态变更导致不必要的子组件进行重新渲染 useCallback useCallback 用于创建返回一个回调函数,该回调函数只会在某个依赖项发生改变时才会更新,可以把回调函数传递给经过优化的

    2024年02月15日
    浏览(44)
  • React性能优化之Memo、useMemo

    React 的渲染机制,组件内部的 state 或者 props 一旦发生修改,整个组件树都会被重新渲染一次,即时子组件的参数没有被修改,甚至无状态组件 会造成性能浪费 React.memo 是 React 官方提供的一个高阶组件,用于缓存我们的需要优化的组件 React 中的组件被设计为在状态或 props 值

    2024年02月14日
    浏览(39)
  • React.Memo和useMemo的区别?

    hello world欢迎来到前端的新世界 😜当前文章系列专栏:react.js 🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误,感谢大家指出)🌹 💖感谢大家支持!您的观看就是作者创作的动力 React.memo和useMemo是React中两个不同的特性,用

    2024年02月06日
    浏览(50)
  • 实际开发中,React应用常见问题【持续更新中】

    实际开发中,React应用常见问题【持续更新中】 “react-router-dom”: “^6.14.2”, “react”: “^18.2.0”, 1、监听路由 2、路由编程式导航 useNavigate() 3、路由链接导航

    2024年02月15日
    浏览(56)
  • 理解 React 中的 useEffect、useMemo 与 useCallback

    先理解 useEffect 有助于学习 useMemo 和 useCallback。因为 useMemo 和 useCallback 的实现实际上都是基于 useEffect 的。 useEffect 是 React 中的一个很重要的 Hook,用于执行副作用操作。什么是副作用?简单来说,就是那些会改变函数外部变量或有外部可观察影响的操作。useEffect 允许你在函

    2024年02月03日
    浏览(43)
  • React hooks之useEffect、useMemo优化技巧

    useEffect使用JSON.stringfy进行过滤,避免重复执行 将数组直接放入依赖数组可能不会按预期工作,因为数组比较是基于引用而不是内容。也就是说,如果数组引用没有变,即使数组内容发生了变化,副作用也不会重新运行。或者数组内饿哦那个没有改变但是引用却发生变化时,

    2024年02月12日
    浏览(48)
  • 简介:在这篇教程中,我们将使用React.js框架创建一个简单的聊天机器人的前端界面,并利用Dialogflo

    作者:禅与计算机程序设计艺术 介绍及动机 聊天机器人(Chatbot)一直是互联网领域中的热门话题。而很多聊天机器人的功能都依赖于人工智能(AI)技术。越来越多的企业希望拥有自己的聊天机器人系统,从而提升自己的竞争力。为此,业界也出现了很多基于开源技术或云

    2024年02月06日
    浏览(59)
  • React.js前端 + Spring Boot后端员工管理

    该项目是一个员工管理系统,前端使用 React.js 构建,后端使用 Spring Boot 和 Data JPA 和 Lombok 构建。它提供了有效管理员工信息的全面解决方案。 特征 响应式设计:响应式 UI 设计,确保跨各种设备的可用性。 数据验证:验证用户输入以确保数据完整性。 使用的技术 前端:R

    2024年04月28日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包