代码编织梦想

React.memo的作用是什么?

简单来讲,就是父组件的state发生变化后,父组件本身(函数式组件)会重新执行一遍,其子组件也会重新执行一遍

父组件

  // 父组件里定义了一个count计数器
  const [count, setCount] = useState(0);

  return (
    <>
      {/* 父组件里每次点击按钮,count都会 + 1 */}
      <button onClick={() => setCount(count + 1)}>加1</button>
      {/* 纯UI组件,又称傻瓜组件,哈哈哈 */}
      <Test />
    </>
  );
复制代码

然后Test组件内部:

function Test(props:any) {
  console.log('我执行了');

  return <button>UI</button>
}

export default Test
复制代码

可以看到,每次点击按钮,控制台都会打印一次我执行了

如果在Test组件内部使用memo,那么我执行了这句话只会打印一次。

// export default Test
export default React.memo(Test)
复制代码

可是在实际中,很少会用到傻瓜组件,就以这个Test组件为例,还可能接收一些props参数。当props改变时,子组件毫无疑问会重新渲染。如果继续使用React.memo,它会判断新的props和旧的props是否相同,如果相同就不会执行子组件函数,否者会再次执行。

比如下面这种Test组件就不会重新渲染:

<Test suibian={1}  />
复制代码

再下面这种就会重新渲染:

<Test suibian={{a: 1}}  />
复制代码

总结来说,memo的作用就是当props发生改变时,组件才会重新渲染,否则使用缓存的渲染结果。

useMemo的作用是什么?

字面意思,就是使用缓存。

看下面父组件里的代码,当我们只是改变count的值时,name没有变,但Test组件依旧会重新渲染。

  const [count, setCount] = useState(0);
  const [name, setName] = useState('joy')

  const data = {
    name
  }

  return (
    <>
      <button onClick={() => setCount(count + 1)}>加1</button>
      <Test suibian={data}  />
    </>
  );
复制代码

使用useMemo,即使count改变Test组件也只会渲染一次了。

  const data = useMemo(() => {
    return {
      name
    }
  }, [name])
复制代码

这里可能会有人好奇了,如果第二个参数是空数组或者不传会怎么样?

若是空数组,即使count改变,data永远都是第一次初始的值。

若是不传,那么useMemo就相当于没使用一样,没起到任何缓存效果。

还有一种情况,若第二个参数传的是表达式,会怎么样呢?

  const data = useMemo(() => {
    return {
      name
    }
  }, [5 === count])
复制代码

会在count === 5的时候,data会刷新一般,然后Test组件又重新渲染了。

总结来说,useMemo就是只有第二个参数发生改变时才会重新执行回调。

useCallBack的作用是什么?

它就是useMemo的语法糖,第一个参数只能是函数类型。

  const goFn = useCallback(() => {
    console.log(name);
  }, [name])

 

React Memo 和 React useMemo 和 useCallback的简单用法-爱代码爱编程

我们首先来讲useMemo的用法 useMemo 首先,说起这个 我们肯定要知道 在class的声明组件中 shouldComponentUpdate shouldComponentUpdate(nextProps, nextState) 使用shouldComponentUpdate()以让React知道当前状态或属性的改变是否不影响组件的输出,默认

详解React.memo、useMemo、useCallback-爱代码爱编程

1:前言 最近开发中使用到了这几个API,这几个API不经常用,刚看到的时候理解也有点模糊,于是网上找了一些讲解并自己动手做了些实验,算是搞明白了。本文主要讲解React.memo、useMemo、useCallback的知识。   2:React.memo React.memo为高阶组件。 如果你的组件在相同 props 的情况下渲染相同的结果

react Hook 之 memo,useCallback,useMemo 性能优化-爱代码爱编程

前言 本文示例 基础示例 需求: 编写个父子组件 父组件 import React, { useState } from 'react' import Child from './child' export default function Parent(props: any) { const [num, setNum] = useS

React hooks 之 React.memo useMemo useCallback-爱代码爱编程

先说一句,react hooks里,大多情况下比较都是浅比较,比如useEffect的浅比较是使用Object.is(arg1, arg2)来比较两个值,想必其他钩子也是如此,这种情况下,如果是基本类型则不会有问题,如果是引用类型,则比较的是两个参数的地址,而非值,比如,Object.is({a: 1}, {a: 1})的结果为false,即使两个对象都是

react-useMemo/useCallback/memo使用-爱代码爱编程

react提供useMemo/useCallback/memo方法,提高页面刷新效率。若组件依赖的属性没有发送变化,组件可以不刷新。以下提供两个场景的具体使用 单组件内使用 使用语法 import React, { useMemo } from 'react' useMemo(() => {}, [] ) 1.useMemo第一个参数是函

React Hook使用之useMemo和useCallback-爱代码爱编程

什么是useMemo? useMemo函数可以缓存已有的计算结果,在组件发生更新进行重新渲染时,会采用已有的缓存结果,而不是重新进行计算,从而达到性能优化的效果。 如果你使用过Vue,那么useMemo就和Vue 中的computed类似。 //useMemo有两个参数 //第一个参数factory:用来处理业务逻辑的计算函数,通常是计算比较占用资源

memo、usememo、usecallback总结_jason秀啊的博客-爱代码爱编程

memo 类组件可以通过继承类 PureComponent 或者实现 shouldComponentUpdate 来主动判断组件是否需要重新渲染,以此来提高性能。在使用函数组件的时候可以使用memo达到此目的。 React.memo 接收两个参数,一个是组件,一个是(比较)函数 组件:组件必须是函数式组件函数:这个函数就是定义组件是否需要重渲染的

react小技巧-react.memo usememo usecallback_golden_chj的博客-爱代码爱编程

React小技巧-React.memo useMemo useCallback 原文: https://piyushsinha.tech/series/optimizing-react?ck_subscriber_id=1555690090 本文例子github Demo:https://github.com/CHJ30/react-tips 1.

【面试准备-react】react.memo和usememo、usecallback的区别_是梦梦啊的博客-爱代码爱编程

1、前言 在react中,性能优化的点有: 调用setState,就会触发组件的重新渲染,无论前后state是否相同父组件更新,子组件也会自动更新 2、定义: memo是一个高阶组件,它接收一个组件A作为参数并返回一个组件B,如果组件B的props(或其中的值)没有改变,则组件B会阻止组件A重新渲染。 useMemo()是

react 中 memo usememo usecallback 到底该怎么用_yinjie…的博客-爱代码爱编程

目录 React.memo怎么用 React.useMemo怎么用 React.memo() 和 useMemo() 的主要区别 React.useCallback 怎么用 memo,useMemo,useCallback的区别 防止不必要的 effect 在 React 函数组件中,当组件中的 props 发生变化时,默认情况下

react 中的 memo、usememo及usecallback-爱代码爱编程

在讲述如何进行性能优化之前,我们先来谈谈 React 为什么会重新渲染。 React 为什么会重新渲染 状态改变是 React 树内部发生更新的唯二原因之一。 import { useState } from "react"; const App = () => { let [color, setColor] = useState

react v16源码之usememo与usecallback_usecallback vue_玉案轩窗的博客-爱代码爱编程

前言 将useMemo和useCallback放在一起来说,是因为这两个Hook都具有缓存效果,它们的返回值在依赖没有变化时总是返回旧值,通常作为优化手段来使用,特别是一些高性能的计算。useMemo类似于Vue中comp

react.memo、usememo和usecallback-爱代码爱编程

我们在使用React开发过程中经常会遇到父组件引入子组件的情况,在不做其他处理的时候,很容易造成子组件不必要的重复渲染。看下面一个的例子,这种情况下,每次父组件更新num值的时候,子组件也会重复渲染。 function

react-爱代码爱编程

1、UseCallback 我们知道,react的hook组件再state和props发生改变时,会重新渲染组件,从而导致子组件也会被重新渲染,但有些时候,子组件的props和state值没有变化,子组件就没必要重新渲染,

react下memo, usememo, usecallback的使用区别解析_react.memo react.pre usememo与usecallback应用场景-爱代码爱编程

文章目录 前言环境基础环境目录结构 memo()1. 基础使用2. 避雷踩坑3.memo总结 useMemo()1. 基础示例2. 监听不变参数3. 监听变化参数4. useMemo总结