当前位置: 首页 > news >正文

React:利用React.memo和useCallback缓存弹窗组件

 父组件TenantManage在每次执行useState时会重新渲染,导致子组件UserForm也会触发重新渲染,即使父组件做的操作和UserForm一点关系也没有,也会触发

解决方式:利用React.memo缓存子组件,在父组件使用缓存版本的MyUserForm 

import UserForm from './userForm' //弹窗组件function TenantManage() {return (<div className='userList'>{/* 弹窗组件 */}<MyUserFormvisiable={isOpenModal}closeModel={closeModel}modelTitle={modelTitle}getUserListWrap={getUserListWrap}></MyUserForm><Card className='searchFlex'></Card></div>)
}const MyUserForm = React.memo(UserForm) //缓存版本的模态框组件
export default TenantManage

 但是上述还是有问题,父组件useState子组件还是会重新渲染

因为父组件给子组件传递了closeModel这个方法,和visiable、modelTitle这些属性,虽然React.memo能将属性缓存,但是没办法把函数缓存。

深入解释:

1、React.memo会对组件的props进行浅比较(即比较前后props的每个属性值是否相等,对于基本类型比较值,对于引用类型比较引用地址)。

2. 对于属性中的函数,由于每次父组件渲染都会创建一个新的函数实例(引用改变),所以即使函数内容相同,React.memo也会认为该prop发生了变化,从而导致子组件重新渲染。

最终解决方法:使用useCallback缓存函数

    // 原来的方法// function closeModel() {// 	setIsOpenModal(false)// }	//使用useCallback缓存const closeModel = useCallback(() => {setIsOpenModal(false)}, [])

http://www.lqws.cn/news/593587.html

相关文章:

  • Oracle 常用函数
  • 设置linux静态IP
  • 测试第六讲-测试模型分类
  • RabbitMQ - SpringAMQP及Work模型
  • 信息化项目验收,软件工程评审和检查表单
  • Qt中使用QSettings数据或结构体到INI文件
  • 边缘人工智能与医疗AI融合发展路径:技术融合与应用前景(下)
  • 区块链存证:数字时代的法律盾牌还是技术乌托邦?
  • 数据结构day5——队列和树
  • 县级智慧水务一体化方案及落地案例PPT(39页)
  • 8.Docker镜像讲解
  • 高强螺栓的计算与选用
  • 深入金融与多模态场景实战:金融文档分块技术与案例汇总
  • Qt时间显示按钮功能详解
  • 【docker】unknown shorthand flag: ‘f‘ in -f See ‘docker --help‘.
  • 实变与泛函题解-心得笔记【16】
  • Electron 应用中的内容安全策略 (CSP) 全面指南
  • MySQL索引深度解析:B+树、B树、哈希索引怎么选?
  • 机器学习在智能金融风险评估中的应用:信用评分与欺诈检测
  • day48
  • C++ 网络编程(13) asio多线程模型IOServicePool
  • CAU数据挖掘实验 表分析数据插件
  • 零信任安全管理系统介绍
  • 安防监控视频汇聚平台EasyCVR v3.7.2版云端录像无法在web端播放的原因排查和解决方法
  • 笔记本电脑怎样投屏到客厅的大电视?怎样避免将电脑全部画面都投出去?
  • Rust 是什么
  • [C#] WPF - 自定义样式(Slider篇)
  • WPF学习(三)
  • 08跨域
  • vue-i18n+vscode+vue 多语言使用