React Antd Tabs 切换子组件重复渲染问题与解决方案
版权申诉
69 浏览量
更新于2024-08-20
收藏 17KB DOCX 举报
"React应用中使用Ant Design的Tabs组件时,遇到子组件在TabPane之间切换时重复渲染的问题。问题的根源在于onChange事件处理函数触发了状态更新,从而导致整个组件树重新渲染。"
在React应用开发中,Ant Design是一个常用的UI库,其中的Tabs组件用于实现选项卡式界面。在示例代码中,有两个`<TabPane>`,每个里面都包含了一个`<AuthedCollections>`子组件,这两个子组件具有相同的属性`collectionType`。当用户在不同Tab之间切换时,`onChange`事件被触发,进而调用`changeTab`函数,更新`collectionType`和`tabActiveKey`的状态。
`changeTab`函数内部根据`key`值改变了`collectionType`的值,并通过`setState`更新了状态。在React中,`setState`会导致组件重新渲染,以反映状态的改变。然而,antd的Tabs组件设计为不销毁先前渲染的TabPane,而是保留它们以优化用户体验,避免在切换时频繁地进行昂贵的挂载和卸载操作。因此,每次切换Tab时,即使子组件的`collectionType`没有改变,由于父组件的状态变化,所有TabPane都会重新渲染,这可能导致子组件不必要的重复渲染。
解决这个问题的一种方法是利用React的条件渲染,只在当前激活的TabPane中渲染对应的子组件。可以修改`<TabPane>`的代码,如下所示:
```jsx
<Tabs
activeKey={tabActiveKey}
onChange={(key: string) => this.changeTab(key)}
type="card"
>
<TabPane tab={"对外授权"} key="/">
{
this.collectionType === CollectionEnums.AUTHED_TO_GRANT && (
<AuthedCollections
collectionType={this.collectionType}
/>
)
}
</TabPane>
<TabPane tab={"申请权限"} key="/">
{
this.collectionType === CollectionEnums.AUTHED_TO_APPLY && (
<AuthedCollections
collectionType={this.collectionType}
/>
)
}
</TabPane>
</Tabs>
```
在这个解决方案中,我们添加了条件判断,只有当`collectionType`匹配当前Tab的预期值时,才会渲染`<AuthedCollections>`。这样,即使`setState`被调用,未激活的Tab中的子组件也不会被重新渲染,从而避免了不必要的性能开销。
总结来说,React应用中Ant Design的Tabs组件在切换时可能引起子组件重复渲染,主要是因为`onChange`触发了状态更新。通过合理利用React的条件渲染特性,可以在不破坏组件逻辑的情况下,有效地减少重复渲染,提高应用性能。
2021-12-29 上传
2021-12-29 上传
2021-12-29 上传
2021-12-29 上传
2021-12-29 上传
2021-12-29 上传
mmoo_python
- 粉丝: 3931
- 资源: 1万+
最新资源
- 黑板风格计算机毕业答辩PPT模板下载
- CodeSandbox实现ListView快速创建指南
- Node.js脚本实现WXR文件到Postgres数据库帖子导入
- 清新简约创意三角毕业论文答辩PPT模板
- DISCORD-JS-CRUD:提升 Discord 机器人开发体验
- Node.js v4.3.2版本Linux ARM64平台运行时环境发布
- SQLight:C++11编写的轻量级MySQL客户端
- 计算机专业毕业论文答辩PPT模板
- Wireshark网络抓包工具的使用与数据包解析
- Wild Match Map: JavaScript中实现通配符映射与事件绑定
- 毕业答辩利器:蝶恋花毕业设计PPT模板
- Node.js深度解析:高性能Web服务器与实时应用构建
- 掌握深度图技术:游戏开发中的绚丽应用案例
- Dart语言的HTTP扩展包功能详解
- MoonMaker: 投资组合加固神器,助力$GME投资者登月
- 计算机毕业设计答辩PPT模板下载