1 回答

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
這是 Relay 的核心模式,盡管很冗長(zhǎng),但實(shí)際上是高度鼓勵(lì)的。
在 Relay 中,鼓勵(lì)子組件以片段的形式自行指定其數(shù)據(jù)需求。
最終,您將積累大量碎片,這些碎片會(huì)傳播到應(yīng)用程序的其他地方,因此值得指出一些關(guān)鍵的 Relay 功能來說明為什么這是好的:
如果您聲明多個(gè)彼此相鄰的片段請(qǐng)求相同的字段,Relay 不會(huì)向您的 API 發(fā)送重復(fù)的請(qǐng)求。相反,它們將在一次往返中全部獲取一次。您不必?fù)?dān)心引入過度獲取/重復(fù)查詢問題,因?yàn)樗鼈冊(cè)?Relay 中不存在。
graphql
Relay 通過 Relay 編譯器引入了一個(gè)編譯步驟,該步驟可以智能地分析您的 GraphQL 架構(gòu)以及您在代碼中定義的任何模板標(biāo)簽。這會(huì)生成artifacts,它有助于自動(dòng)管理數(shù)據(jù)獲取和更新中繼存儲(chǔ),因此您不必這樣做。通過聲明大量片段,您可以有效地告訴編譯器和存儲(chǔ)組件的數(shù)據(jù)要求,即使它們是相同/相似的。復(fù)制是 Relay 的偉大之處。位于樹根部的 QueryRenderer 祖先將處理實(shí)際的獲取,并且您在樹中較低的子組件上定義的片段會(huì)指示 Relay Compiler 和 Store 在獲取數(shù)據(jù)后將數(shù)據(jù)發(fā)送到何處。這是從#2 得出的。
因此,簡(jiǎn)而言之,要充分利用 Relay,請(qǐng)使用片段聲明組件的數(shù)據(jù)需求,并讓 Relay 完成繁重的工作,而不必?fù)?dān)心重復(fù)和缺乏可重用性。這對(duì)你有利。
添加回答
舉報(bào)