2016-03-29 9 views
2

GraphQLとReact Relayを使用してアプリケーションを構築しようとしています。React Relayは、突然変異ファットクエリの一部としてルートクエリを更新します。

この一環として、私は、以下の仕様を持つルートクエリを作成しました:

query { 
    AllServices { 
    edges { 
     node { 
     id 
     } 
    } 
    } 
} 

だから私は、突然変異作成している - よく働く - CreateGithubServiceと呼ばれるが。ここで

は、リレーの突然変異からの抜粋です:

getFatQuery() { 
     return Relay.QL` 
     fragment on CreateGithubServicePayload { 
      createdService 
     } 
     ` 
    } 

    getConfigs() { 
     return [{ 
      type: "REQUIRED_CHILDREN", 
      children: [ 
       Relay.QL` 
        fragment on CreateGithubServicePayload { 
         createdService { 
          id 
         } 
        } 
       ` 
      ] 
     }] 
    } 

私が持っている問題は、この更新した情報に依存しているビューを引き起こしていないことです。

マイAllServicesクエリが再フェッチされていないと私は脂肪クエリでそれを指定することができません。

要素をすべてのサービスクエリに追加するために私の突然変異をセットアップするにはどうすればよいですか?

ありがとうございます!

答えて

5

REQUIRED_CHILDREN、ローカルグラフを更新しないであろう。それは厳密には、突然変異更新の成功コールバックでのみ使用される余分なデータを取得することです。実際には、それはでも、ソースコードの外に文書化されていないので、私はあなたがこのようにそれを使用することを決めたかどうかはわかりません...あなたがそう言っていない

が、私は(あなたがこの新しいノードをしたいと仮定していますcreatedService)はAllServices接続に追加されますか?もしそうなら、あなたはあなたの変異は、その接続に影響することをリレーに指示する必要があります。現時点では

  1. を、リレーは、基本的にすべての変異がノード、任意のないクエリに影響を与える前提としています。私の知る限りでは、ノード以外のルートクエリーを更新するために突然変異を構成することはできません。したがって、AllServices接続の親として機能するルートにノードを追加する必要があります(これは通常はviewerです)。つまり、次のように動作させてください:query { viewer { AllServices { ... } } }

  2. あなたの突然変異ペイロードは、新しいデータだけでなく変更されたものを常に返すべきです。つまり、ペイロードからAllServices接続を再フェッチする方法が必要です。 viewerノードをスキーマに追加したら、そのノードを突然変異ペイロードに戻して、太いクエリを変更して接続が変更されたことを指定できます。たとえば、fragment on CreateGithubServicePayload { viewer { AllServices } }

  3. これらの2つのスキーマの変更を考えれば、突然変異{ viewer: this.props.viewer.id }
ようfieldIDsを FIELDS_CHANGEを使用して指定します
関連する問題