2016-12-05 10 views
1

これは私の現在のシナリオです。私のホームページはHTTPリクエストを使って複数のコンポーネントを構成しています。すべてのコンポーネントがHTTPリクエストを完了した場合にのみページを表示できますか?ページを表示する前にすべてのコンポーネントのロードを完了してください - React JS

ありがとうございます!

P.S.私はWebアプリをどのように開発するのか、私の計画段階に入ってからまだ表示するコードはありません。

+1

私は通常、読み込み画面としてビューポート全体を占めるdivを持っています。それは絶対的な位置付けを持ち、ページの残りの部分より高いZインデックスを持ちます。 httpコールが終了すると、最後のコールバックでdivを非表示にすることができます –

+0

しかし、私の問題は、すべての(複数の)httpコールが終了した場合にどのように検出できますか?ページにhttpコールが1つしかない場合でも、私の場合はホームページが各コンポーネントのhttp呼び出しで複数のコンポーネントに分割されているので、これを行うことができます。私はそれをどうやってやるのか考えない。 –

+0

[observer pattern](https://en.wikipedia.org/wiki/Observer_pattern)を使用できます。基本的に、http応答が終了するたびに通知されるオブジェクトが1つあります。 (リストまたは単純なカウントに基づいて)十分な時間が通知されると、ページが表示されます –

答えて

2

あなたのアプリはまだコード化されていないので、より良いコンポーネント構造を採用することができます。 これは私が見てやり遂げたアプローチです。

1.最初の場所で必要ありませんグローバルローダー -

あなたの各コンポーネントは、以下に示すようにアプリのシェルarchitechtureの使用と同様に、データがロードされる前でも、レンダリング処理することができます。 Facebookのポストの ロードシェルは
enter image description here コード

class Post extends React.Component { 
     render() { 
     return this.props.isLoading ? (
      <div className="post">...</div> 
     ) : (
      <div className="post-shell"></div> 
     ); 
     } 
    } 

2.グローバル・ローダー

コードのようになります

class App extends React.Component { 
     render() { 
     return this.props.isLoading ? (
      <RootComponent {...props}> 
     ) : (
      <Loader /> 
     ); 
     } 
    } 
Loaderコンポーネントは、絶対位置のローディングアイコンがある

/コンテンツ。 RootComponentは、すべての小道具に必要なデータがあるように、データが読み込まれるときにのみマウントされます。

多くのプロジェクトは、コンポーネントが対応するシェルで記述されていないため、前者には贅沢はありません。しかし、あなたは時間によって制約されていないからです。最初のアプローチは最高のUXを提供します。

+0

私は1番と一緒に行くべきだと思います。お返事ありがとう! –

+0

'this.props.isLoading'条件をチェックするには? @Sagi_Avinash_Varma –

関連する問題