reactjs - 在 useState 中使用对象作为状态时防止重新渲染
问题描述
背景:
我正在渲染可折叠元素的动态列表。折叠的打开/关闭状态存储在一个对象中
cosnt [collapse, setCollapse] = useState({a: false, b: false, c: false })
并且此状态通过 onClick 切换
const toggle = (id) => setCollapse({...collapse, [id]: !collapse[id]})
折叠工作,但每次切换都会重新渲染所有折叠元素,因为根据我的理解,每个切换都会创建一个新对象,这会导致所有折叠元素的重新渲染。我只想重新渲染切换的折叠。
问题:
如何在不导致其他折叠元素重新呈现的情况下进行切换?
例子
在控制台中可以看到,单击一下会导致所有折叠元素都被重新渲染。
解决方案
有两种方法可以防止重新渲染:
React.memo()
:用于功能
组件
React.memo(<Component />)
这保证了它仅在道具更改时才重新渲染。这相当于一个纯组件。
React.PureComponent()
:对于类组件
与上面相同。
类组件的另一种普通方法是控制在shouldComponentUpdate
这种情况下不应依赖的组件。
在您的情况下,使用包装React.memo
以避免重新渲染。
推荐阅读
- android - 如何为微调器设置动画,使其随选项扩展
- google-analytics - Google Analytics - 排除经过身份验证的用户
- java - 本地存储静态数据
- google-apps-script - 如何在一定时间后删除谷歌表格
- javascript - 使用 JavaScript 获取破折号视频属性
- php - 如何查看导致 HTML 页面无法加载的 PHP 错误?
- node.js - ApostropheCMS 整合件
- python - macOS Catalina 的 Python-image-library (Pillow) 问题
- node.js - FaunaDB:从文档集合中选择所有 ID
- ios - 在 iOS 中卸载应用程序时如何从钥匙串中删除存储的用户名和密码?