説明する: Tabs コンポーネントが切り替わると、TabPane に含まれる同じサブコンポーネントが繰り返しレンダリングされます。次に例を示します。 <タブ アクティブキー={タブアクティブキー} onChange={(キー: 文字列) => this.changeTab(キー)} タイプ="カード" > <TabPane tab={"外部認証"} key="/authed-by-me"> <AuthedCollections コレクションタイプ={this.collectionType} /> </タブペイン> <TabPane tab={"権限を申請"} key="/authed-to-me"> <AuthedCollections コレクションタイプ={this.collectionType} /> </タブペイン> </タブ> changeTab = (キー: 文字列) => { this.collectionType = key === '/authed-by-me' ? CollectionEnums.AUTHED_TO_GRANT : CollectionEnums.AUTHED_TO_APPLY; this.setState({ tabActiveKey: キー }) }; 分析: Tabs の onChange リスナー関数 changeTab で setState を呼び出し、ページが再レンダリングされるようにします。 Antd の戦略は、現在のものだけをレンダリングすることです。ユーザーが切り替えても、以前にレンダリングされたノードは削除されません。なので、切り替えるためのクリック数は徐々に増えていきます。これは、マウント フェーズ中にユーザーが非同期リクエストを呼び出して、切り替え時にレンダリングが繰り返されるのを防ぐためです。そのため、上位レイヤーが更新されるにつれてレンダリング回数も増加していくことが予想されます。 解決: タブが切り替わるたびに、Reactの条件付きレンダリングを使用して、前のページをDomツリーから移動します。 <タブ アクティブキー={タブアクティブキー} onChange={(キー: 文字列) => this.changeTab(キー)} タイプ="カード" > <TabPane tab={"外部認証"} key=""> { this.collectionType === CollectionEnums.AUTHED_TO_GRANT && <AuthedCollections コレクションタイプ={this.collectionType} /> } </タブペイン> <TabPane tab={"権限を申請"} key="/authed-to-me"> { this.collectionType === CollectionEnums.AUTHED_TO_APPLY && <AuthedCollections コレクションタイプ={this.collectionType} /> } </タブペイン> </タブ> Antdタブの現在のページが前後に切り替わり、フォームデータはクリアされません(またはクリアされます)フォームをクリアする方法は しかし、この記事では主に display:none を柔軟に使用すると、切り替え時にフォーム データが再レンダリングされ、setState によってクリアされることを回避できます (つまり、フォームをクリアせずにタブ項目を切り替える)。 クエリ領域 クエリ領域*/ <div className="検索フォームエリア"> { <div style={{ display: activeKey === '1' ? 'block' : 'none' }}><SearchFieldForm // プロジェクト角度 ref={(form) => this.ProjSearchForm = form} 送信Fuc={this.getProjPage} fieldsData={projSearchData} 列番号={4} diyItemLayout={{ labelCol: { span: 4 }, wrapperCol: { span: 17 } }} // moreSearchData={moreSearchData} </div> } { <div style={{ display: activeKey === '2' ? 'block' : 'none' }}>< SearchFieldForm // 製品角度 ref={(form) => this.PrdSearchForm = form} 送信Fuc={this.getProjPage} fieldsData={prdSearchData} 列番号={4} diyItemLayout={{ labelCol: { span: 4 }, wrapperCol: { span: 17 } }} </div> } </div> リストエリア {/* リストエリア */ <div style={{ height: tableHeight + 100 }} className='myProjTable'> <タブ defaultActiveKey="1" onChange={this.handleTabsChange}> <TabPane tab="プロジェクト角度" key="1" style={{ backgroundColor: '#fff' }}> <カスタムテーブル 行キー='プロジェクトID' サイズ="小" スタイル={{ 高さ: テーブルの高さ }} columns={列} テーブルデータ={プロジェクトテーブルデータ} 展開された行のレンダリング = {this.expandedRowRender} ページネーション={ページネーション} handleTableChange={this.handleTableChange} スクロール={{ y: テーブルスクロール高さ、x: 1660 }} テーブル行選択 = {this.tableRowSelection} /> </タブペイン> <TabPane tab="製品アングル" key="2" style={{ backgroundColor: '#fff' }}> <カスタムテーブル 行キー="プロジェクトID" サイズ="小" スタイル={{ 高さ: テーブルの高さ }} 列={列Prd} テーブルデータ={prdテーブルデータ} handleTableChange={this.handleTableChange} ページネーション={ページネーション} スクロール={{ y: テーブルスクロール高さ、x: 1800 }} テーブル行選択 = {this.tableRowSelection} /> </タブペイン> </タブ> </div> React antd タブの切り替えによりサブコンポーネントが繰り返し更新される問題についてはこれで終わりです。antd タブの繰り返し更新に関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: OpenSSL を使用した Kubernetes 証明書の生成の概要
>>: 動的および静的分離を実装するための Nginx サンプル コード
目次1. 計算プロパティ構文: 1. 省略形:文法: 2. 文章を完成させる: 2. モニタリング(...
Mysql5.7.19バージョンは今年リリースされた新しいバージョンです。最近のMySQLのバージ...
目次1.配列を初期化する2. 配列の合計、最大値、最小値3. エラー値をフィルタリングする4. 論理...
B ツリーは一般的なデータ構造です。彼と一緒にB+ツリーがあります。ここで、概念を明確にする必要があ...
多くの友人は、フロントエンドを学習するときに、ボックス モデルがデフォルトで正方形であることに気付き...
昨日はデータベースへの接続に問題はありませんでしたが、今日はデータベースへの接続時にこのエラーが報告...
例示するこの記事は、2017 年 5 月 20 日に MySQL-5.7.18 を使用して作成されま...
「初心者向けソースコードからの MySQL デッドロック問題の理解」では、MySQL ソースコードを...
序文最近、Tomcat の起動プロセスを分析していました。Tomcat のソース コードはアイデア次...
HTML Web ページ リスト タグの学習チュートリアル。 HTML ページでは、リストはアウトラ...
これは多くの人が遭遇した問題だと思います。実際、Web ページから FLASH をダウンロードして修...
目次1. 一般的な高階関数1.1、フィルター1.2、地図1.3、減らすHigher Order fu...
1. MySQL独自のストレステストツールMysqlslap mysqlslap は、mysql に...
私は最近、会社で統計レポートの開発に関わるプロジェクトに取り組んでいました。データの量が比較的多かっ...
1. まず、インタラクティブに使用するための .json ファイルを作成します。json データ形式...