React.jsで非同期データを読み込むときのUIフリッカーの防止

dumbmatter:

IndexedDBにいくつかのデータがあり、非同期にしかアクセスできません。そのデータを使用してReact.js UIを構築したいと思います。一般的な考え方は、IndexedDBからデータをロードし、そのデータに基づいていくつかのUIを表示する複数のReactコンポーネントを用意し、ユーザーは現在表示されているコンポーネントを切り替えることができるということです。

私の懸念は、余分なUIがちらつくことなくエレガントにこれを実現する方法がわからないことです。非同期データの読み込みを行っcomponentDidMountてデータをに入れることができますthis.stateが、それrenderが完了する前に呼び出され、何も表示しないか、またはIndexedDBからのデータが取得されている間、ほんの一瞬のプレースホルダーデータを表示する必要があります。

renderIndexedDBからのデータが読み込まれるまでは、それが必要です。ロードに時間がかからないことはわかっています。新しいデータがロードされている間も前のコンポーネントが引き続き表示されるので、2つ(古い->空白/プレースホルダー)ではなく1つだけ(古い->新しい)ちらつきがあります。 ->新規)。これは、通常のWebページの動作に似ています。あるWebサイトから別のWebサイトへのリンクをクリックしても、リンクされたWebサイトからのサーバーが応答するのを待っている間、ブラウザには空白の画面やプレースホルダー画面がすぐには表示されません。

Reactコンポーネントの外部でデータをロードしてから呼び出しReact.render、それを経由で渡すことができると思いますthis.propsしかし、コンポーネントのネストはトリッキーになり、一部のコンポーネントは時間の経過とともに更新され、新しいデータを、それらを初期化するまったく同じコードを介してIndexedDBから取得するため、混乱を招きます。this.state新しいデータが利用可能であるというシグナルを受け取ったときにコンポーネント自体の中でデータを更新できるので、データを格納するための理想的なユースケースのように思えます。初期化と更新は、this.loadData()いくつかの値を設定する関数を呼び出すのと同じくらい簡単this.stateです...しかし、私は前述の余分なちらつきを持っています。

誰かより良いアイデアがありますか?この問題の標準的な解決策は何ですか?それは本当にミリ秒の空白/プレースホルダーのちらつきがあるだけなのですか?

ジョーP:

コメントから、以前の実装での動作(必要なデータをフェッチするまでナビゲートするのを待つ)が望ましい目標であるように思えます。その場合は、ちらつきを発生させずにこれを行う最善の方法は、外部オブジェクトを使用して状態を管理し、フェッチ時にデータを小道具として渡すことです。

Reactルーターには、ナビゲートする前に特定のコンポーネントのデータをフェッチするためのwillTransitionToフックがあるかなり良いソリューションがあります。これには、何か問題が発生した場合に簡単にエラーをキャッチできるという追加の利点があります。

新しいリンクで更新:

https://github.com/reactjs/react-router

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ReactルーターWebpack非同期チャンクの読み込み

分類Dev

ローカルファイルからReact JSへのJSONデータの読み込み

分類Dev

ReactとReduxによる非同期画像の読み込み

分類Dev

React.jsにローカル画像を読み込む

分類Dev

React.jsにローカル画像を読み込む

分類Dev

React.jsにローカル画像を読み込む

分類Dev

reactコンポーネント内の非同期読み込みスクリプト

分類Dev

react-testing-libraryを使用して非同期データの読み込みを行うコンポーネントをスナップショットテストする方法は?

分類Dev

Reactを使用してFirebaseからデータを読み込む

分類Dev

ReactでD3jsから外部データを読み込めないのはなぜですか?

分類Dev

Redux:Reactビューイベントで非同期データフェッチをトリガーします

分類Dev

シングルページアプリケーション(React JS)内のcsvファイルにデータを書き込む方法は?

分類Dev

React.jsは `componentWillMount`のデータベースから非同期的にアセットを取得します

分類Dev

Reactの高次コンポーネントから非同期データをフェッチする方法

分類Dev

ギャラリー内のすべての画像がReactのAPIから(フックを使用して)(完全に)読み込まれるまで、読み込みインジケーターを表示します

分類Dev

useContextデータ読み込みエラー404を伴うReact.jsの問題

分類Dev

ページの読み込み時に表示されないFirebaseデータと組み合わせたReactフック

分類Dev

Firestoreから非同期でデータを取得し、Reactのプロパティとして渡します

分類Dev

React.jsで非同期コールバック関数を使用すると状態を読み取れません

分類Dev

React.js:Fetch APIとオブジェクト配列からの小道具を使用したJSONデータの読み込み

分類Dev

React.js-Renderで読み込み中/空の状態を区別するクリーンな方法

分類Dev

Reactを使用して、ルートを変更するときにブラウザータブでブラウザーの読み込みインジケーターをトリガーするにはどうすればよいですか?

分類Dev

Reactを使用して、ルートを変更するときにブラウザータブでブラウザーの読み込みインジケーターをトリガーするにはどうすればよいですか?

分類Dev

Javascript-非同期フェッチからのReactデータは「useEffect()」と「useState」を使用して定義されていません

分類Dev

React useReducer非同期データフェッチ

分類Dev

Reactルーターリンクの再読み込みページ:外部イベントとの競合

分類Dev

ReactでメールでJSONを読み込む

分類Dev

データの読み込み中にreact-nativeFlatListでisLoading要素をレンダリングするにはどうすればよいですか?

分類Dev

React.jsでの条件付き読み込み

Related 関連記事

  1. 1

    ReactルーターWebpack非同期チャンクの読み込み

  2. 2

    ローカルファイルからReact JSへのJSONデータの読み込み

  3. 3

    ReactとReduxによる非同期画像の読み込み

  4. 4

    React.jsにローカル画像を読み込む

  5. 5

    React.jsにローカル画像を読み込む

  6. 6

    React.jsにローカル画像を読み込む

  7. 7

    reactコンポーネント内の非同期読み込みスクリプト

  8. 8

    react-testing-libraryを使用して非同期データの読み込みを行うコンポーネントをスナップショットテストする方法は?

  9. 9

    Reactを使用してFirebaseからデータを読み込む

  10. 10

    ReactでD3jsから外部データを読み込めないのはなぜですか?

  11. 11

    Redux:Reactビューイベントで非同期データフェッチをトリガーします

  12. 12

    シングルページアプリケーション(React JS)内のcsvファイルにデータを書き込む方法は?

  13. 13

    React.jsは `componentWillMount`のデータベースから非同期的にアセットを取得します

  14. 14

    Reactの高次コンポーネントから非同期データをフェッチする方法

  15. 15

    ギャラリー内のすべての画像がReactのAPIから(フックを使用して)(完全に)読み込まれるまで、読み込みインジケーターを表示します

  16. 16

    useContextデータ読み込みエラー404を伴うReact.jsの問題

  17. 17

    ページの読み込み時に表示されないFirebaseデータと組み合わせたReactフック

  18. 18

    Firestoreから非同期でデータを取得し、Reactのプロパティとして渡します

  19. 19

    React.jsで非同期コールバック関数を使用すると状態を読み取れません

  20. 20

    React.js:Fetch APIとオブジェクト配列からの小道具を使用したJSONデータの読み込み

  21. 21

    React.js-Renderで読み込み中/空の状態を区別するクリーンな方法

  22. 22

    Reactを使用して、ルートを変更するときにブラウザータブでブラウザーの読み込みインジケーターをトリガーするにはどうすればよいですか?

  23. 23

    Reactを使用して、ルートを変更するときにブラウザータブでブラウザーの読み込みインジケーターをトリガーするにはどうすればよいですか?

  24. 24

    Javascript-非同期フェッチからのReactデータは「useEffect()」と「useState」を使用して定義されていません

  25. 25

    React useReducer非同期データフェッチ

  26. 26

    Reactルーターリンクの再読み込みページ:外部イベントとの競合

  27. 27

    ReactでメールでJSONを読み込む

  28. 28

    データの読み込み中にreact-nativeFlatListでisLoading要素をレンダリングするにはどうすればよいですか?

  29. 29

    React.jsでの条件付き読み込み

ホットタグ

アーカイブ