2016-02-29 5 views
7

現在、特定のユーザーの特定の一連のタスクのステータスを表示するページを作成しています。データをフェッチするために、私は、次のリレーコンテナ持っている:私はからデータを取得したいユーザーを定義するにはクエリの前に変数をリレーする

export default Relay.createContainer(TaskReview, { 
    initialVariables: { 
    limit: Number.MAX_SAFE_INTEGER, 
    studentId: null, 
    }, 
    fragments: { 
    task:() => Relay.QL` 
     fragment on Task { 
     id, 
     title, 
     instruction, 
     end_date, 
     taskDataList(first: $limit, type: "subTasks", member: $studentId) { 
      edges { 
      node { 
       id, 
       answer, 
       completion_date, 
      } 
      } 
     }, 
     ... 

を、私が使用:

componentWillMount =() => { 
    let {relay} = this.props; 
    relay.setVariables({ 
    studentId: this.props.member.id 
    }); 
} 

しかし、ここでの問題は、クエリがあるということです最初にnullで実行され、initialVariablesで定義されています。バックエンドの実装では、studentIdがNULLの場合、すべてのメンバーのデータが返されます。

結果は、所与のmemberIdですべてのメンバーと最初の時間、および第2の時間、上記のクエリは、二回実行することです。

これは私のcomponentWillUpdate内の他のものと混乱します。とにかく、この変数を渡して最初のクエリでそのメンバーのデータしか取得できないのですか?

ありがとうございました。

答えて

2

これらの初期条件で、変数をルート経由で下に通すことでアプリを準備します。

class TaskReviewRoute extends Relay.Route { 
    static paramDefinitions = { 
    studentId: {required: true}, 
    }; 
    static queries = { 
    task:() => Relay.QL`query { ... }`, 
    }; 
    static routeName = 'TaskReviewRoute'; 
} 

<Relay.RootContainer 
    Container={TaskReview} 
    route={new TaskReviewRoute({studentId: '123'})} 
/> 
+1

OPの問題をどのように解決するか、あなたの答えについて詳しく説明してください。最初のロード時にはstudentIdがnullになるため、リクエストはNULL値をバックエンドに送信してデータをフェッチします。それが問題の原因です。 – lvarayut

+0

上記のように 'studentId'を経路経由でRelayコンテナに渡し、' componentWillMount'ロジックを_remove_すると、 'studentId'は最初からnullではありません。値が親からpropsとして渡されない場合(例えば、前述のルートパラメータの存在により 'Relay.RootContainer 'によって)、' initialVariables'をプレースホルダ/デフォルトと考えてください。 – steveluscher

+0

'studentId'が先行することがわからず、ルートの初期化子に渡すことができない場合はどうなりますか?私は値がルータの 'params'を通るような状況があるので、これを行うには別の方法が必要です – nburk

関連する問題