ポータルスロットとも言えますが、Vueのスロットとは異なり、React要素を指定されたコンテナ(実際のDOM)にレンダリングすることを指します。 たとえば、Modal コンポーネントは通常、デフォルトで本体の実際の構造の子要素として直接レンダリングされるため、ReactDOM.createPortal(ReactElement, RealDOM container) を使用して React 要素を作成できます。コード例: 'react' から React をインポートします 'react-dom' から ReactDOM をインポートします。 './components/Modal' から Modal をインポートします。 const PortalModal = ReactDOM.createPortal(<Modal />, document.body) デフォルト関数App()をエクスポートする{ <div className="app-container"> を返します。 <ポータルモーダル /> </div> } ブラウザコンソールでは、実際のModalコンポーネントが実際にはbodyの直接の子要素としてレンダリングされていることがわかりますが、React開発者ツールを使用すると、Modalコンポーネントが仮想DOMツリー構造のAppコンポーネントの下にあり、クラス名がapp-containerのdivにあることがわかります。 したがって、React コンポーネントの仮想 DOM ツリー構造は、実際の DOM ツリー構造と一致していない可能性があると結論付けることができます。 したがって、イベントバブリングに注意を払う必要がある
エラー境界処理デフォルトでは、レンダリング中にコンポーネントにエラーが発生した場合、コンポーネント ツリー全体がアンマウントされます。エラー境界: レンダリング中に子コンポーネントで発生したエラーをキャプチャし、エラーが親コンポーネントに伝播するのを防ぐ機能を持つコンポーネント。 コンポーネントでエラーをキャッチする (クラス コンポーネント): サブコンポーネントがエラーをレンダリングしたときにトリガーされる静的メソッドstatic getDerivedStateFromErrorを使用します。
React をインポートし、{PureComponent} を 'react' からインポートします。 エクスポートデフォルトクラスErrorBoundaryはPureComponentを拡張します{ 状態 = { エラー: false } 静的 getDerivedStateFromError(エラー) { console.log('レンダリングエラー: ', error) 戻る { isError: 真 } } 与える() { エラーの場合 戻る <span>問題が発生しました...</span> } this.props.children を返す } } componentDidCatch(error, info)関数の使用
React をインポートし、{PureComponent} を 'react' からインポートします。 エクスポートデフォルトクラスErrorBoundaryはPureComponentを拡張します{ 状態 = { エラー: false } コンポーネントDidCatch(エラー、情報) { // info はエラーの概要です console.log('レンダリング エラー: ', error) console.log('レンダリング情報: ', info) this.setState({ isError: 真 }) } 与える() { エラーの場合 戻る <span>問題が発生しました...</span> } this.props.children を返す } } エラー境界を使用しない場合はどうなりますか?React 16 以降では、エラー境界でキャッチされないエラーが発生すると、React コンポーネント ツリー全体がアンマウントされます。 経験上、バグのある UI を残しておくよりも完全に削除する方がよいことがわかっています。たとえば、Messenger のような製品では、通常とは異なる UI をユーザーに提示すると、ユーザーが他のユーザーに間違ったメッセージを送信してしまう可能性があります。 エラー境界を追加すると、アプリケーションで例外が発生したときに、より優れたユーザー エクスペリエンスを提供できます。たとえば、Facebook Messenger では、サイドバー、メッセージ パネル、チャット履歴、メッセージ入力ボックスが別々のエラー境界で囲まれます。一部の UI コンポーネントがクラッシュしても、残りのコンポーネントは引き続きインタラクティブになります。 注記一部のエラーはエラー境界コンポーネントによって捕捉されません 独自のコンポーネントのエラー 非同期エラー(setTimeout でスローされたエラーなど) React をインポートし、{PureComponent} を 'react' からインポートします。 // エラー境界.jsx エクスポートデフォルトクラスErrorBoundaryはPureComponentを拡張します{ 状態 = { エラー: false } /* この関数は実行されません */ 静的 getDerivedStateFromError(エラー) { console.log('レンダリングエラー: ', error) 戻る { isError: 真 } } 与える() { エラーの場合 戻る <span>問題が発生しました...</span> } this.props.children を返す } } // Comp.jsx Compコンポーネントエクスポートデフォルト関数Comp() { タイムアウトを設定する(() => { 新しいエラーをスローします('setTimeout error') }, 1000) <div>Comp</div> を返す } // App.jsx はエクスポートデフォルト関数 App() を使用します { 戻る <> <エラー境界> <コンプ /> </エラー境界> </> } イベントで発生したエラー つまり、子コンポーネントのレンダリング中にのみ同期エラーを処理する React でのポータルとエラー境界処理の実装に関するこの記事はこれで終わりです。React ポータルとエラー境界処理の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Docker で hyperf を開発する完全な使用例の詳細な説明
>>: MySQL sql_modeの適切な設定に関する詳細な説明
mysql 5.7.21 winx64 のインストールと設定方法: MySQLのコミュニティバージョ...
centos-DVD1バージョンシステムの固定IPアドレスは192.168.159.128で、cen...
MySQL 5.7.13 Mac用インストールチュートリアル、非常に詳細で、以下のように記録されてい...
CSS は div にスクロールを追加し、スクロール バーを非表示にします。具体的なコードは次のとお...
この記事の例では、画像比較を実現するためのjQueryプラグインの具体的なコードを参考までに共有して...
序文最近、フロントエンドの学習に関する以前のメモを整理したところ、モバイル Web 画面の適応 (r...
前回の記事では、MySQL トランザクションについて説明しました。これで、MySQL トランザクショ...
目次ナンセンス実装された機能文章要点ナンセンスデモプレビュー実装された機能デフォルトでホームページが...
IDC のサーバーの /partition 使用率がいっぱいです。 100% に到達しました!確認し...
出典: http://www.ruoyi.vip/ 'vue' から Vue をイン...
後悔を癒す薬は世の中にある、考えてみる気さえあれば!コンテナを再作成する必要はもうありません。 m2...
序文:ジュニアプログラマーとして、私は自分自身の個人ウェブサイトを構築し、それを他の人に見せることを...
1. インストールターミネーターの最大の特徴は、1つのウィンドウで複数のターミナルを開くことができる...
1. mysql-5.7.17-winx64.zip インストール パッケージをダウンロードします ...
著者は最近、仕事でパフォーマンスのボトルネックの問題に遭遇しました。MySQL テーブルには毎日約 ...