2017-06-13 12 views
0

を反応します。レンダリングしない - 私は私のAPI GraphQLにクエリを作るためにアポロクライアントを使用して反応させ、Reduxのアプリを持っている

私はGridContainerWithDataがgraphqlで問い合わせを行うのconst(gql` ...)

これはデータ私の中を返すですexport default connect(mapStateToProps, mapDispatchToProps)(GridContainerWithData);を使用してクエリの呼び出しを行うことGridContainerを持っていますエラーが存在し、ロード状態(真または偽)がある場合は、クエリー応答を含む小道具。

は今、私は自分自身がif(loading) {}を使用してロードを管理しています。

この問題は、クエリの読み込みが行われたときに、それは再びロード状態でだとするとき、私のコンポーネントをレンダリングしています。私はif(loading) {}を使用しない場合、私は、クエリは、負荷状態にあるときに何かを返す必要というエラーを取得します。

のローディングのときにコンポーネントに表示されないようにする方法はありますか?

私は

shouldComponentUpdate (nextProps) { 
    if (this.props.data.loading !== nextProps.data.loading) { 
     console.log(‘i will rerender’, nextProps.data.loading); 
     return true; 
    }else { 
     return false; 
    } 
} 

が、そこに運を使用してみました。

のローディングのときにコンポーネントに表示されないようにする方法はありますか?

編集:

これは誰でも助けることができる場合、これは私のGridContainerです。

class ActionsToDoGridContainer extends Component { 

render() { 
    const {error} = this.props.data; 

    if (error) { 
    return (
     <div className='ComponentDistance'> 
     An unexpected error happened : 
     {error} 
     </div>); 
    } else { 
    return (
     <div className='ComponentDistance'> 
      <ActionsToDoGrid {...this.props}/> 
     ActionsToDoButtons {...this.props}/> 
     </div> 
    ); 
    } 
    } 
} 

答えて

1

編集:質問のポスターは、このコードで自分の問題を解決:

shouldComponentUpdate(nextProps) { 
    if (nextProps.data.loading === false) { 
    return true; 
    } else { 
    return false; 
    } 
} 

私はあなたがshouldComponentUpdateで右方向に考えて、代わりのロードかどうかをチェックされたと思います状態が異なる場合は、データが異なるかどうかを確認してください。

shouldComponentUpdate (nextProps) { 
    const thisData = this.props.data.queryDataResponse; 
    const nextData = nextProps.data.queryDataResponse; 
    if (!someLibrary.deepEquals(thisData, nextData)) { 
     return true; 
    }else { 
     return false; 
    } 
} 

データが変更された場合、あなたの関数はtrueを返し、更新します。あなたはいくつかのエッジケースを実行する可能性がありますので、壊れているときにこの関数を忘れないでください

+0

残念ながら、私はnullを返すと、新しいデータを受け取るまで、ロード時間のグリッドが消えます。クエリがロード完了するまで私の前のデータでグリッドを保持したいと思います。 – petithomme

+0

私は自分の答えを更新しました。私はあなたがこれのためにshouldcomponentupdateを使用することができると思う –

+0

今、それはアプリケーションの開始時に2回レンダリング(私はそれが正常だと思う)。 **最初の動作**(変更ページ)は、一度レンダリングするだけです(読み込みが終了したとき)。しかし、** 2回目に**私はページを変更します(または3番目または4番目または...)、それは2回レンダリングします(ロードしていない)。 理由は何ですか? – petithomme

関連する問題