useCallback与useMemo使用场景
疑问:为什么需要useCallback和useMemo
疑问:父组件变化是指什么情况
答:父组件的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当做依赖的时候
使用场景案例:注意点击按钮的时候比较一下与上一个案例输出日志的区别。这个案例不会重复输出日志。
2、子组件re-render十分昂贵的时候
useCallback与useMemo使用场景的更多相关文章
- 精读《Function Component 入门》
1. 引言 如果你在使用 React 16,可以尝试 Function Component 风格,享受更大的灵活性.但在尝试之前,最好先阅读本文,对 Function Component 的思维模式有 ...
- 使用React Hook后的一些体会
一.前言 距离React Hook发布已经有一段时间了,笔者在之前也一直在等待机会来尝试一下Hook,这个尝试不是像文档中介绍的可以先在已有项目中的小组件和新组件上尝试,而是尝试用Hook的方式构建整 ...
- 如何构建自己的 react hooks
我们组的前端妹子在组内分享时谈到了 react 的钩子,趁此机会我也对我所理解的内容进行下总结,方便更多的同学了解.在 React 的 v16.8.0 版本里添加了 hooks 的这种新的 API,我 ...
- 如何对 React 函数式组件进行优化
文章首发个人博客 前言 目的 本文只介绍函数式组件特有的性能优化方式,类组件和函数式组件都有的不介绍,比如 key 的使用.另外本文不详细的介绍 API 的使用,后面也许会写,其实想用好 hooks ...
- React躬行记(15)——React Hooks
Hook(钩子)是React v16.8新引入的特性,能以钩子的形式为函数组件附加类组件的状态.生命周期等特性.React的类组件有难以拆分.测试,状态逻辑分散,难以复用等问题,虽然可以通过渲染属性( ...
- React Hooks 深入系列
本文基于近段时间对 hooks 碎片化的理解作一次简单梳理, 个人博客.同时欢迎关注基于 hooks 构建的 UI 组件库 -- snake-design. 在 class 已经融入 React 生态 ...
- useMemo、useCallback简单理解
1.useMemo.useCallback都是使参数(函数)不会因为其他不想关的参数变化而重新渲染. (1)useMemo const memoDom = useMemo(() => { ret ...
- React Hooks & useCallback & useMemo
React Hooks & useCallback & useMemo https://reactjs.org/docs/hooks-reference.html#usecallbac ...
- React中useMemo与useCallback的区别
useMemo 把"创建"函数和依赖项数组作为参数传⼊入useMemo,它仅会在某个依赖项改变时才重新计算memoized 值.这种优化有助于避免在每次渲染时都进⾏行行⾼高开销的计 ...
- React Hooks: useCallback理解
useCallback把匿名回调“存”起来 避免在component render时候声明匿名方法,因为这些匿名方法会被反复重新声明而无法被多次利用,然后容易造成component反复不必要的渲染. ...
随机推荐
- 让CSS flex布局最后一行列表左对齐的N种方法
原文链接https://mp.weixin.qq.com/s?__biz=MjM5MDA2MTI1MA==&mid=2649091838&idx=1&sn=fa4e1ed1e0 ...
- 在IIS上同站点部署多个程序操作步骤
1.打开IIS管理器: 2.右击选中"网站",选择"添加网站":输入网站名称.路径.IP地址等信息: 3.确定后并访问网站: 部署后可能会因为框架不支持导致报错 ...
- R Works with Google Earth Engine - Installation 【rgee - 安装问题解决集锦】
Date : 2022/04/24 Intallation Tutorial - Reference : Introduction to rgee (r-project.org) Prerequisi ...
- 多点DLT (Direct Linear Transformation) 算法
阅读前可以先参看上一篇代数视觉博客: 四点DLT (Dierct Linear Transformation) 算法 对于大于4个点的数据点来进行 DLT 算法变换, 如果数据点的标注都十分准确,那么 ...
- vue 图片分页
<div class="activities phone"> <!-- 动态 --> <div class="activity" ...
- mysql数据库新建用户,并赋予权限
新建用户: CREATE USER 'testuser'@'LOCALHOST' IDENTIFIED BY '123456'; 赋予权限: grant select on *.* to 'testu ...
- Vue项目使用/deep/报错:SassError: expected selector解决方案--亲测有效
项目npm run dev报错如下: 解决方法: 尝试用 ::v-deep 替换 /deep/ ,成功解决了问题. 效果如下图所示(完美解决~) 某些预处理器(例如Sass)可能无法>>& ...
- Gitlab Ubuntu部署
一.安装存储库 sudo curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh ...
- docker下载java镜像,执行xxx.jar文件
docker pull java:8u111
- SqlServer基礎
REVERSE(欄位) 反轉 CHARINDEX(篩選字符,欄位,[start]) 例:CHARINDEX('/',ProImage,13) 從13位查詢/所在索引 SUBSTRING(欄位,star ...