這節(jié)的主要內(nèi)容有
——轉(zhuǎn)化GraphQL查詢成Relay
——使react的層次適應(yīng)語GraphQL的層次
——第一個Relay查詢操作
——Relay連接模型的邊界和節(jié)點
轉(zhuǎn)化GraphQL查詢成Relay
代替HTML字符串,使用javascript對象編程,但我們需要一個對象代表GraphQL查詢的時候,我們可以添加更多的功能到查詢的對象上,例如,可以進行內(nèi)部檢查、校驗字段類型,幸運的是,我們不需要手動轉(zhuǎn)化GraphQL操作
Relay有幫助的方法,叫做Relay.QL,他是我們使用查詢標記的模版.
Relays使用Javascript的這種特性攔截GraphQL查詢字符串返回一個對象,
Relay.QL `query { ... }` => {}
因為這種方法添加類型信息到查詢對象上,需要了解GraphQL的結(jié)構(gòu),而不是緩存整個結(jié)構(gòu),在編譯所有Javascript資源時Relay使用babel插件在服務(wù)端準備這些Relay.QL對象,
對于AllQutes查詢,我們需要做的是;
-第一,在客戶端使用Relay.QL ``模版語法 寫查詢
-然后,使用webpack處理所有的Javascript資源
-當有Relay.QL調(diào)用AllQutes查詢,要求GraphQL結(jié)構(gòu),關(guān)于類型和字段
-最后,使用類型產(chǎn)生想要的查詢對象并且返回
一個Relay應(yīng)用將會有多個 Relay.QL調(diào)用,代替每次向GraphQL服務(wù)端請求字段類型我們想要的轉(zhuǎn)化查詢,我們能優(yōu)化服務(wù)端的處理,通過緩存整個schema結(jié)構(gòu)到一個大的JSON對象在服務(wù)端
緩存文件寫好后,通過webpack命令,讀取緩存一次并且重用從內(nèi)存里面加速調(diào)用Relay.QL,通過babel插件 babel-relay-plugin
Root-level field for the quotes library
根級別的字段
這種數(shù)據(jù)需求所有者分離是有幫助的,允許組建獨立增長/調(diào)試代碼更容易/測試代碼更容易,
fragment 被定義在GraphQL的類型上
Relay's connection model
Relay的連接模型
Relay的功能變得越來越強大,當處理大集合的時候,例如,幾百個名言,通常的做法是監(jiān)聽頁面做分頁處理,例如,顯示20條名言每頁,Relay的連接模型將會幫助我們處理分頁快速地和高效地,
我們首要做的是將allQuotes字段轉(zhuǎn)化成Relay的連接字段,我們將會命名它為QuotesConnectionType,以便清晰的給客戶端用,
intercept攔截