[英]Relay QueryRenderer fragmentContainer passed props different from server response because id conflict
我基本上有這個奇怪的問題:
QueryRenderer
props
填充在QueryRenderer
render({ error, props })
功能 props
通過createFragmentContainer
傳遞到子組件中,該子組件呈現值 我不確定中繼從自己的存儲中查找數據時中繼在做什么,但是我懷疑這是因為類型中缺少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} />
}}
/>
Scoreboard.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
}
}
`,
})
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
值STG
覆蓋為42,而不應如此。
是因為Match
類型中沒有id
(響應是一個數組)引起此問題嗎? 這就是為什么中繼正在尋找具有相同ID的Team
的原因?
發生這種情況是因為Relay用每次更新的最新值更新ID為330
的Team
類型(即SGT); 列表的最后一個是42。
你可以刪除score
從場Team
(它似乎有點奇怪,一個團隊沒有一個得分,這是她有一個分數的比賽中),並創建了2場Match
類型: awayTeamScore
和homeTeamScore
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.