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
内の他のものと混乱します。とにかく、この変数を渡して最初のクエリでそのメンバーのデータしか取得できないのですか?
ありがとうございました。
OPの問題をどのように解決するか、あなたの答えについて詳しく説明してください。最初のロード時にはstudentIdがnullになるため、リクエストはNULL値をバックエンドに送信してデータをフェッチします。それが問題の原因です。 – lvarayut
上記のように 'studentId'を経路経由でRelayコンテナに渡し、' componentWillMount'ロジックを_remove_すると、 'studentId'は最初からnullではありません。値が親からpropsとして渡されない場合(例えば、前述のルートパラメータの存在により 'Relay.RootContainer 'によって)、' initialVariables'をプレースホルダ/デフォルトと考えてください。 – steveluscher
'studentId'が先行することがわからず、ルートの初期化子に渡すことができない場合はどうなりますか?私は値がルータの 'params'を通るような状況があるので、これを行うには別の方法が必要です – nburk