当前位置: 首页 > 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.dtcms.com/a/263691.html

相关文章:

  • 欢乐熊大话蓝牙知识24:LE Secure Connections 是 BLE 的安全升级术
  • HarmonyOS应用开发高级认证知识点梳理 (一) 布局与样式
  • 微信小程序使用秋云ucharts echarts
  • 利用springEvent,进行服务内部领域事件处理
  • 安卓接入百度定位和地图SDK
  • Go并发模式精要:掌握Goroutine与Channel的实战艺术
  • 开篇:GORM入门——Go语言的ORM王者
  • 物联网数据洪流下,TDengine 如何助 ThingLinks 实现 SaaS 平台毫秒级响应?
  • LabVIEW调用Excel宏实现数据可视化
  • 4D 毫米波雷达
  • 21、鸿蒙学习——使用App Linking实现应用间跳转
  • SQL Server 进阶:递归 CTE+CASE WHEN 实现复杂树形统计(第二课)
  • 【Python基础】12 闲谈分享:Python用于无人驾驶的未来
  • 借助飞算AI新手小白快速入门Java实操记录
  • 嵌入式编程-使用AI查找BUG的启发
  • AG32调试bug集合
  • [论文阅读] 人工智能 + 软件工程 | 从软件工程视角看大语言模型:挑战与未来之路
  • 基于 Vue + RuoYi 架构设计的商城Web/小程序实训课程
  • 企业级应用技术-ELK日志分析系统
  • java生成word文档
  • 11年考研作文真题大数据
  • 边缘人工智能与医疗AI融合发展路径:技术融合与应用前景(下)
  • SpringBoot计时一次请求耗时
  • mac python3.13 selenium安装使用
  • [特殊字符] 分享裂变新姿势:用 UniApp + Vue3 玩转小程序页面分享跳转!
  • IntelliJ IDEA 2025- 下载安装教程图文版详细教程(附激活码)
  • Python 库 包 nltk (Natural Language Toolkit)
  • 类加载生命周期与内存区域详解
  • 【FR801xH】富芮坤FR801xH之UART
  • npm list的使用方法详细介绍