基本的に、私はこの奇妙な問題を抱えています:
- から行われたgraphqlリクエスト
QueryRenderer
- サーバーから返された応答にはデータが含まれています (開発ツールの [ネットワーク] タブから検査)
props
QueryRenderer
render({ error, props })
関数に取り込まれた- 値をレンダリング
props
する子コンポーネントに渡されるgetcreateFragmentContainer
- 1 つのフィールドのレンダリングされた値が応答とは異なる
独自のストアからデータを検索しているときにリレーが何をしているのかわかりませんがid
、型の宣言が欠落しているためだと思われます。コード例を次に示します。
App.js
<QueryRenderer
environment={env}
query={graphql`
query ScoreboardContainerQuery($ID: ID!) {
scoreboard(id: $ID) {
...Scoreboard_scoreboard
}
}
`}
variables={{ID: gameID}}
render={({ error, props }) => {
return <Scoreboard scoreboard={props ? props.scoreboard : undefined} />
}}
/>
スコアボード.js
const Scoreboard = ({ scoreboard }) => (
<main>
{scoreboard.matches.map(match => <Match key={match.id} match={match} />)}
</main>
)
export default createFragmentContainer(Scoreboard, {
scoreboard: graphql`
fragment Scoreboard_scoreboard on FootballScoreboard {
matches {
...Match_match
}
}
`,
})
マッチ.js
const Match = ({ match }) => (
<div>
<div>
{match.homeTeam.displayName}-
{match.homeTeam.score}
</div>
<div>
{match.awayTeam.displayName}-
{match.awayTeam.score}
</div>
</div>
)
export default createFragmentContainer(Match, {
match: graphql`
fragment Match_match on Match {
date
homeTeam { // this is a Team type
id
displayName
score
}
awayTeam { // this is a Team type
id
displayName
score
}
}
`,
})
サーバーからのサンプル応答matches
:
matches = [
{
"date": "2017-09-03T06:00:00Z",
"homeTeam": {
"id": "330",
"displayName": "STG",
"score": "20"
},
"awayTeam": {
"id": "332",
"displayName": "CBY",
"score": "0"
}
},
{
"date": "2017-08-27T06:00:00Z",
"homeTeam": {
"id": "329",
"displayName": "PEN",
"score": "14"
},
"awayTeam": {
"id": "330",
"displayName": "STG",
"score": "0"
}
},
{
"date": "2017-08-12T05:00:00Z",
"homeTeam": {
"id": "330",
"displayName": "STG",
"score": "42"
},
"awayTeam": {
"id": "337",
"displayName": "GCT",
"score": "0"
}
},
]
レンダリングされた値:
(
<main>
<div>
<div>STG-42</div>
<div>CBY-6</div>
</div>
<div>
<div>PEN-0</div>
<div>STG-42</div>
</div>
<div>
<div>STG-42</div>
<div>GCT-18</div>
</div>
</main>
)
したがって、すべてのSTG
値が 42 にオーバーライドされますが、そうであってはなりません。
この問題は、応答が配列でid
あるタイプにないために発生するのでしょうか? リレーが同じIDMatch
を探しているのはそのためですか?Team