疑问:为什么需要useCallback和useMemo

答: 父组件变化,会引起子组件的 re-render,为了阻止子组件不必要的 re-render,需要满足两个条件:
1、子组件用 react.memo包裹
2、子组件的属性没有发生变化。useCallback和useMemo就是为了实现函数或者对象数据重复声名导致新旧函数或者对象判定为不同属性的情况。
Code Pen示例: 
  子组件的props是函数和obj数据的时候: codepen案例
  子组件被react.memo包裹的时候:codepen案例
  子组件被react.memo包裹的时候并且函数props和对象props使用useCallback和useMemo: codepen案例
大家查看案例的时候一定要看输出的日志,观察到底何时child component会re-render

疑问:父组件变化是指什么情况

答:父组件的props变化或者state变化。

疑问:父组件变化一定会引起子组件的re-render吗

答:从子组件不做特殊处理,父组件变化一定会影响子组件的re-render,注意这里的re-render不一定会引起浏览器的重新渲染。这里有一个示意案例: https://codepen.io/dog/pen/mdKzXrY?editors=1111

疑问:子组件re-render是什么意思,会引起页面重新渲染吗

答:re-render是指子组件会进行新旧dom比较。如果是函数是组件可以在 return之前打印日志,这时候日志会输出的,也就是函数组件会执行一次,但是页面不一定会重新渲染

 

疑问:只要是函数或者对象数据做为props的时候就需要用useCallback和useMemo吗

答:并非。因为useCallback和useMemo创建和保存也是有成本的。并且普通的函数与对象创建几乎不会有太多的性能影响。

这是官网的介绍:https://zh-hans.reactjs.org/docs/hooks-faq.html#are-hooks-slow-because-of-creating-functions-in-render

疑问:什么场景适合使用 useCallback和useMemo

1、子组件中有hooks把props传过来的函数或者object当做依赖的时候

使用场景案例:注意子组件useEffect的依赖

使用场景案例:注意点击按钮的时候比较一下与上一个案例输出日志的区别。这个案例不会重复输出日志。

2、子组件re-render十分昂贵的时候

useCallback与useMemo使用场景的更多相关文章

  1. 精读《Function Component 入门》

    1. 引言 如果你在使用 React 16,可以尝试 Function Component 风格,享受更大的灵活性.但在尝试之前,最好先阅读本文,对 Function Component 的思维模式有 ...

  2. 使用React Hook后的一些体会

    一.前言 距离React Hook发布已经有一段时间了,笔者在之前也一直在等待机会来尝试一下Hook,这个尝试不是像文档中介绍的可以先在已有项目中的小组件和新组件上尝试,而是尝试用Hook的方式构建整 ...

  3. 如何构建自己的 react hooks

    我们组的前端妹子在组内分享时谈到了 react 的钩子,趁此机会我也对我所理解的内容进行下总结,方便更多的同学了解.在 React 的 v16.8.0 版本里添加了 hooks 的这种新的 API,我 ...

  4. 如何对 React 函数式组件进行优化

    文章首发个人博客 前言 目的 本文只介绍函数式组件特有的性能优化方式,类组件和函数式组件都有的不介绍,比如 key 的使用.另外本文不详细的介绍 API 的使用,后面也许会写,其实想用好 hooks ...

  5. React躬行记(15)——React Hooks

    Hook(钩子)是React v16.8新引入的特性,能以钩子的形式为函数组件附加类组件的状态.生命周期等特性.React的类组件有难以拆分.测试,状态逻辑分散,难以复用等问题,虽然可以通过渲染属性( ...

  6. React Hooks 深入系列

    本文基于近段时间对 hooks 碎片化的理解作一次简单梳理, 个人博客.同时欢迎关注基于 hooks 构建的 UI 组件库 -- snake-design. 在 class 已经融入 React 生态 ...

  7. useMemo、useCallback简单理解

    1.useMemo.useCallback都是使参数(函数)不会因为其他不想关的参数变化而重新渲染. (1)useMemo const memoDom = useMemo(() => { ret ...

  8. React Hooks & useCallback & useMemo

    React Hooks & useCallback & useMemo https://reactjs.org/docs/hooks-reference.html#usecallbac ...

  9. React中useMemo与useCallback的区别

    useMemo 把"创建"函数和依赖项数组作为参数传⼊入useMemo,它仅会在某个依赖项改变时才重新计算memoized 值.这种优化有助于避免在每次渲染时都进⾏行行⾼高开销的计 ...

  10. React Hooks: useCallback理解

    useCallback把匿名回调“存”起来 避免在component render时候声明匿名方法,因为这些匿名方法会被反复重新声明而无法被多次利用,然后容易造成component反复不必要的渲染. ...

随机推荐

  1. CF1753C Wish I Knew How to Sort

    正解: 这场我打过,E 题没做出来. 状态:\(dp_i\) 表示前 \(x\) 个有 \(i\) 个 \(0\),剩余步数的期望,\(x\) 为原序列 \(0\) 的个数. 转移:\(dp_i = ...

  2. Note Taking App Comparison: Notesnook vs Joplin

    I have used many note-taking apps, including Notion, oneNotes, Obsidian, Sublime Text, etc. Here I w ...

  3. Android MVP框架 详细代码

    android mvp的好处,网上一搜一大堆,相对于一开始普通的在activity中处理所有的不管是网络请求还是页面渲染,最大的好处是简洁了,废话不多说,看代码 这里网络请求使用了两种,一种是自己封装 ...

  4. springboot-maven打包项目

    在project 标签内,新增一下内容 <build> <plugins> <!--打包项目--> <plugin> <groupId>or ...

  5. 【面试题】手写async await核心原理,再也不怕面试官问我async await原理

    前言 async await 语法是 ES7出现的,是基于ES6的 promise和generator实现的 generator函数 在之前我专门讲个generator的使用与原理实现,大家没了解过的 ...

  6. python使用pysimplegui简单制作一个exe程序

    一.安装打包程序 控制台输入: pip install pysimplegui-exemaker -- 安装exe制作库 pip install PySimpleGUI -- 安装图形化界面编辑库 二 ...

  7. 2022-05-24内部群每日三题-清辉PMP

    1.一家公司具有一项变更控制委员会(CCB)政策,规定其每月举行一次会议来评估和审查变更请求.一个项目正在执行过程中,由于时间表和目标较为激进,需要更快的响应时间.项目经理应该怎么做? A.更新风险登 ...

  8. LWC-001_Event

    文章来源: Events (lwc.dev) 1. 监控子组件的动作: Child.html <template> <button>Click</button> & ...

  9. VSCode 修改终端显示字体 字体间隔过大

    参考链接: https://code84.com/172442.html

  10. Mac下Homebrew更新国内源brew update卡死(完美解决,网上都不完整)

    https://blog.csdn.net/zz00008888/article/details/113880633