react中使用antd的tabs进行标签切换时,销毁dom
2023-12-13 05:39:03
前言:最近接的一个需求,需要将之前通过点击按钮触发跳转到的另外一个页面,通过跟点击按钮的页面融合,通过tab的形式进行切换。【由于业务方面的需求,两个页面的逻辑代码部分存在一致性(经多年长期沿用下来的代码)】
实现方法:
引入antd的tab即可
render(){
const {waitDealNum, activeKey} = this.state
return (
<ACard className='service-process-tab'>
<Tabs defaultActiveKey="1" animated={false}>
<TabPane tab="我的" key="1">
<ServiceProcessCp {...this.props} />
</TabPane>
<TabPane tab="你的" key="2">
<ClaimedServiceCp {...this.props} type='1' />
</TabPane>
</Tabs>
</ACard>
)
}
存在问题:
单纯将页面2作为一个组件引入页面1的话,可能在一些触发操作中,会存在问题,比如说打开一个弹窗,两个组件都存在的话,就会弹出两次
解决方法:
最快的解决方法是,在切换tab时,销毁掉隐藏的dom,如果说tab切换频繁,会存在重复渲染跟销毁元素,对性能方面有一定影响
最好的解决方法是,重构一下页面,对相互影响的方法做区分处理,抽离公共部分
1、antd提供的tabs的?destroyInactiveTabPane属性可以解决上面的问题
<Tabs defaultActiveKey="1" animated={false} destroyInactiveTabPane={true}>
2、给tabs绑定onchange事件,通过监听activeKey来控制dom展示
handleTabChange = (value) => {
this.setState({
activeKey: value
})
}
render(){
const {waitDealNum, activeKey} = this.state
return (
<ACard className='service-process-tab'>
<Tabs defaultActiveKey="1" animated={false} onChange={this.handleTabChange}>
<TabPane tab="我的" key="1">
{activeKey == 1 ? <ServiceProcessCp {...this.props} /> : null}
</TabPane>
<TabPane tab="你的" key="2">
{activeKey == 2 ? <ClaimedServiceCp {...this.props} type='1' /> : null}
</TabPane>
</Tabs>
</ACard>
)
}
文章来源:https://blog.csdn.net/chen_ac/article/details/134953426
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!