2017-06-23 43 views
2

私の最上位コンポーネントには、ユーザーの資格情報を含む設定ダイアログが含まれています。そのダイアログが変更され、ダイアログが閉じられると(状態はdialogOpen=falseに変更されます)、資格情報が変更された可能性があるため、サーバーから新しいフェッチを強制します。 Relay classicでは、トップレベルのコンポーネントにRelay.RootContainerが含まれているので、そのルートコンテナにforceFetch=trueを渡したばかりです。リレーモダンでは、私のトップレベルコンポーネントにはQueryRendererが含まれています。では、この場合、どのように再フェッチを強制するのですか?リレーでフェッチを強制的に強制する方法

この問題は、https://github.com/facebook/relay/issues/1684であり、QueryRenderer が常にがリフェッチすることを示しているようですが、これは私のテストではそうではありません。少なくとも、設定ダイアログが閉じられたときに状態の変更/更新後にfetchQueryが呼び出されるのを見ていません。私はおそらく、その問題の声明を完全に理解していないと思う。

誰でも明示できますか?

答えて

6

OK、私はここで私の切断を理解したと思う。 QueryRendererのソースをチェックすると(私が最初にこれをしなかった理由はわかりません)、props.variablesが変更されるとフェッチが発生することがわかりました。だから、僕はrefetchと呼ばれるブールインスタンス変数を定義して、私のダイアログが却下されたときに、その値を反転:

<QueryRenderer 
    environment={environment} 
    query={query} 
    variables={{refetch: this.refetch}} 

これは十分に文書化していないようですのでQueryRendererが再フェッチすることをするときどんな、私はここで言及ます

  • 現在のパラメータは、前のqueryパラメータと等しくありません。
  • 現在のenvironmentパラメータは、前のenvironmentパラメータと同じではありません。
  • 現在のvariablesパラメータは、前のvariablesパラメータと等しくありません。
関連する問題