国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術(shù)及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - React - React antd tabs切換造成子組件重復刷新

React antd tabs切換造成子組件重復刷新

2022-02-22 16:41一堆亂碼 React

這篇文章主要介紹了React antd tabs切換造成子組件重復刷新,需要的朋友可以參考下

描述:

Tabs組件在來回切換的過程中,造成TabPane中包含的相同子組件重復渲染,例如:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<Tabs
 activeKey={tabActiveKey}
 onChange={(key: string) => this.changeTab(key)}
 type="card"
>
  <TabPane tab={"對外授權(quán)"} key="/authed-by-me">
    <AuthedCollections
        collectionType={this.collectionType}
     />
  </TabPane>
  <TabPane tab={"申請權(quán)限"} key="/authed-to-me">
    <AuthedCollections
      collectionType={this.collectionType}
     />
  </TabPane>
</Tabs>
 
 
changeTab = (key: string) => {
 this.collectionType = key === '/authed-by-me' ? CollectionEnums.AUTHED_TO_GRANT : CollectionEnums.AUTHED_TO_APPLY;
 this.setState({
  tabActiveKey: key
 })
};

分析:

在Tabs的onChange監(jiān)聽函數(shù)changeTab中調(diào)用setState,造成頁面重新render。antd 的策略是,只渲染當前的。當用戶切換過后,不刪除之前渲染過的節(jié)點。所以點擊切換會逐漸增多。為的是防止用戶在 mount 階段調(diào)用異步請求導致切換時反復渲染。所以 render 數(shù)量隨著上層刷新而整體刷新并增加是預期行為。

解決方案:

運用react的條件渲染,在每一次tab切換的時候?qū)⑸蟼€頁面移出Dom樹

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<Tabs
 activeKey={tabActiveKey}
 onChange={(key: string) => this.changeTab(key)}
 type="card"
>
 <TabPane tab={"對外授權(quán)"} key="">
 {
 this.collectionType === CollectionEnums.AUTHED_TO_GRANT &&
 <AuthedCollections
 collectionType={this.collectionType}
 />
 }
 </TabPane>
 <TabPane tab={"申請權(quán)限"} key="/authed-to-me">
 {
 this.collectionType === CollectionEnums.AUTHED_TO_APPLY &&
 <AuthedCollections
 collectionType={this.collectionType}
 />
 }
 </TabPane>
</Tabs>

Antd Tabs 當前頁面來回切換 表單數(shù)據(jù)不清空(或者清空)

清空表單的辦法是this.props.form.resetFields();

但是本篇文章主要講解不清空

靈活使用 display:none 就可以避免切換的時候表單數(shù)據(jù)被setState重新渲染清空掉 (即切換tab項,不清空表單)

React antd tabs切換造成子組件重復刷新

React antd tabs切換造成子組件重復刷新

查詢區(qū)域

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{/* 查詢區(qū)域 */}
    <div className="search-form-area">
     {
      <div style={{ display: activeKey === '1' ? 'block' : 'none' }}><SearchFieldForm // 項目角度
       ref={(form) => this.ProjSearchForm = form}
       submitFuc={this.getProjPage}
       fieldsData={projSearchData}
       colNum={4}
       diyItemLayout={{ labelCol: { span: 4 }, wrapperCol: { span: 17 } }}
      // moreSearchData={moreSearchData}
      /></div>
     }
     {
      <div style={{ display: activeKey === '2' ? 'block' : 'none' }}>< SearchFieldForm // 產(chǎn)品角度
       ref={(form) => this.PrdSearchForm = form}
       submitFuc={this.getProjPage}
       fieldsData={prdSearchData}
       colNum={4}
       diyItemLayout={{ labelCol: { span: 4 }, wrapperCol: { span: 17 } }}
      /></div>
     }
    </div>

列表區(qū)域

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 {/* 列表區(qū)域 */}
        <div style={{ height: tableHeight + 100 }} className='myProjTable'>
          <Tabs defaultActiveKey="1" onChange={this.handleTabsChange}>
            <TabPane tab="項目角度" key="1" style={{ backgroundColor: '#fff' }}>
              <CustomTable
                rowKey='projId'
                size="small"
                style={{ height: tableHeight }}
                columns={columns}
                tableData={projTableData}
                expandedRowRender={this.expandedRowRender}
                pagination={pagination}
                handleTableChange={this.handleTableChange}
                scroll={{ y: tableScrollHeight, x: 1660 }}
                tableRowSelection={this.tableRowSelection}
              />
            </TabPane>
            <TabPane tab="產(chǎn)品角度" key="2" style={{ backgroundColor: '#fff' }}>
              <CustomTable
                rowKey="projId"
                size="small"
                style={{ height: tableHeight }}
                columns={columnsPrd}
                tableData={prdTableData}
                handleTableChange={this.handleTableChange}
                pagination={pagination}
                scroll={{ y: tableScrollHeight, x: 1800 }}
                tableRowSelection={this.tableRowSelection}
              />
            </TabPane>
          </Tabs>
        </div>

到此這篇關(guān)于React antd tabs切換造成子組件重復刷新的文章就介紹到這了,更多相關(guān)antd tabs重復刷新內(nèi)容請搜索服務器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/TZ2318387771/article/details/108503639

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99re免费视频精品全部 | 超碰官网| 五月婷婷视频 | 欧美成视频 | 国内久久精品 | 99精品国产一区二区三区 | 亚洲国产aⅴ精品一区二区 少妇一级片免费看 | 国产精品久久久久久一区二区三区 | 亚洲成av人片在线观看无 | 亚洲久久| 欧美成人高清视频 | 色接久久 | 国产精品久久久久久久久久久久久 | 欧美一区二区三区 | 日本欧美久久久久免费播放网 | 亚洲在看| 国产精品亚洲第一区 | 欧美透逼 | 亚洲成av人片在线观看 | 久久影院一区 | 青青国产在线 | 狠狠草视频 | 在线成人免费电影 | 超碰日韩 | 91在线视频导航 | 日韩精品一区二 | 国产精品一区二区三区四区 | www久| 久久免费精品视频 | 视频一区二区三区在线播放 | 成人免费观看在线视频 | 免费视频成人国产精品网站 | 欧美日韩精品一区 | 特黄特色大片在线观看视频网站 | 激情久久综合网 | 欧美激情一区二区三区在线视频 | 成人av电影在线观看 | 久久免费看少妇a高潮一片黄特 | 久久久久久国产精品 | 欧美日韩国产中文 | 欧美成人午夜视频 |