React性能优化之Memo、useMemo

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

React.memo

React 的渲染机制,组件内部的 state 或者 props 一旦发生修改,整个组件树都会被重新渲染一次,即时子组件的参数没有被修改,甚至无状态组件
会造成性能浪费

React.memo 是 React 官方提供的一个高阶组件,用于缓存我们的需要优化的组件

React 中的组件被设计为在状态或 props 值发生变化时重新渲染。但是,这可能会影响应用程序的性能,因为即使更改只是为了影响父组件,附加到父组件的所有其他子组件都将重新呈现。当父组件重新渲染时,其所有子组件也会重新渲染。
React Memo 是一个高阶组件,它包装组件以记忆渲染的输出并避免不必要的渲染。这提高了性能,因为它会记住结果并跳过渲染以重用上次渲染的结果。

已经记忆化的组件,怎么触发更新

  • 即使一个组件被记忆化了,当它自身的状态发生变化时,它仍然会重新渲染。memoization 只与从父组件传递给组件的 props 有关。
  • 即使组件已被记忆化,当其使用的 context 发生变化时,它仍将重新渲染。记忆化只与从父组件传递给组件的 props 有关。
  • useMemo
    • 见拓展(下面)
  • 自定义比较函数(见Memo参数-第二个参数,下面)

两种方式

  • 直接创建(类式创建)
    const myComponent = React.memo((props) => {
        /* render using props */
    });
    export default myComponent;
    
  • 函数组件
    const myComponent = (props) => {
        /* render using props */
    };
    export const MemoizedComponent = React.memo(myComponent);

仅当 props 值发生变化或组件的状态和上下文发生变化时,memo组件才会重新渲染

参数

React.memo(Component, arePropsEqual?)

  • Component
    组件
  • arePropsRqual
    可选参数,为一个函数
    接受两个参数:

    一个函数,接受两个参数:组件的前一个 props 和新的 props。如果旧的和新的 props 相等,即组件使用新的 props 渲染的输出和表现与旧的 props 完全相同,则它应该返回 true。否则返回 false。通常情况下,你不需要指定此函数。默认情况下,React 将使用 Object.is 比较每个 prop。

function MyComponent(props) {
  /* 使用 props 渲染 */
}
function shouldMemo(prevProps, nextProps) {
  /*
  如果把 nextProps 传入 render 方法的返回结果与
  将 prevProps 传入 render 方法的返回结果一致则返回 true,
  否则返回 false
  */
}
export default React.memo(MyComponent, shouldMemo);

应用场景

  • 当props没有改变时跳过重新渲染

  • 使用state更新记忆化(memoized)组件

切记,不可以普遍使用该组件,不能都进行缓存,太多缓存,会造成负优化

拓展

useMemo

useMemo(calculateValue, dependencies)

在组件的顶层调用 useMemo 来缓存每次重新渲染都需要计算的结果,它在每次重新渲染的时候能够缓存计算结果

    const cachedValue = useMemo(calculateValue, dependenies)
  • calculateValue
    要缓存计算的函数。之后组件更新,如果dependenies没有发生变化,React将直接返回相同值。否则,将会再次调用calculateValue并返回最新结果,然后进行缓存以便下次进行使用。
  • dependenies
    跟一般钩子的依赖项作用一样

参考资料

官网
掘金文章来源地址https://www.toymoban.com/news/detail-622176.html

到了这里,关于React性能优化之Memo、useMemo的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • React hooks之useEffect、useMemo优化技巧

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

    2024年02月12日
    浏览(46)
  • 【前端知识】React 基础巩固(二十三)——React 性能优化 SCU相关

    React 的渲染流程 JSX - 虚拟 DOM - 真实 DOM React 的更新流程 props/state 改变 - render函数重新执行 - 产生新的DOM树 - 新旧DOM树进行diff - 计算出差异进行更新 - 更新到真实的DOM React 在 props 或 state 发生改变时,会调用 React 的 render 方法,会创建一颗不同的树 React 需要基于这两颗不同的

    2024年02月15日
    浏览(71)
  • 【three.js / React-three-fiber】加载3D模型性能优化

    无论是大型虚拟世界还是简单的网站,性能优化都是必要的。 特别是在运用三维模型的情况下,我们需要更加深入的优化。因为 三维模型通常包含大量的数据和复杂的几何形状 ,如果不进行性能优化,浏览器可能会因为负载过重而崩溃。 在本文中,我们将探讨如何在 thre

    2024年02月02日
    浏览(48)
  • 前端工程化实战:React 模块化开发、性能优化和组件化实践

    前端工程化实战是指通过组织工作流程、使用工具和技术来提高前端开发效率和质量的一种方法。常见的前端工程化实践包括模块化开发、自动化构建、代码检查和测试、性能优化等。下面将简要介绍模块化开发、性能优化和组件化实践。 模块化开发 在 React 中实现模块化开

    2023年04月10日
    浏览(66)
  • React useMemo 实际开发使用小结

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

    2024年02月16日
    浏览(40)
  • React中useMemo的简单使用

    useMemo主要用来解决使用React hooks产生的无用渲染的性能问题,用来做缓存用。 useMemo使用场景,比如有两个变量(依赖项),只需要在其中一个变量变化时发生变化,否则拿缓存的值;或者其中另一个变量的变化不需要引起重新计算时使用。该属性类似于vue中的计算属性,有

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

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

    2024年02月15日
    浏览(41)
  • 理解React页面渲染原理,如何优化React性能?

    当使用React编写应用程序时,可以使用JSX语法来描述用户界面的结构。JSX是一种类似于HTML的语法,但实际上它是一种JavaScript的扩展,用于定义React元素。React元素描述了我们想要在界面上看到的内容和结构。 在运行React应用程序时,JSX会被转换成真实的DOM元素,这个过程主要

    2024年02月08日
    浏览(43)
  • React.memo每天一个小知识,有例子

    react的子组件props接收父组件的属性 运用场景:子组件如果接收多个参数,父组件传的值有变化,就更新(多次请求接口,再有图片请求的时候,费劲),比如打开弹出框,open就是true/false, 但是你只想在单据不一样的时候更新,就需要自定义逻辑, 用了React.memo回调函数判断。

    2024年01月19日
    浏览(41)
  • React.memo、shouldComponentUpdate、PureComponent的基本使用

    当我们组件内部有大量的计算是,避免组件内部进行不必要的重新渲染,使用React.memo进行缓存组件,避免不必要的重新渲染 React.memo 是用来判断是否需要重新渲染组件,和 shouldComponentUpdate 的区别是 shouldComponentUpdate 用于class组件方式,而 React.memo 用于 hooks 方式 语法 React.me

    2024年02月06日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包