apollo-client
是一個比較難用的 GraphQL
客戶端,本系列帶你集成 redux,趟平深坑,鑽入原理,讓你在 21 分鐘內學完 apollo-client。html
NOTE: 閱讀過程當中若是產生任何不適,請及時撥打 120 自行搶救,謝謝。前端
提供定製方案react
我司原本採用 RESTful api,可是徹底遵循 RESTful 以來,隨着業務不斷擴展,api endpoint 簡直多到爆炸。
對於前端來講,api 太多也難以維護,尤爲是設計初期沒有提早介入,會致使返回相似的 model,其 Schema 可能不一樣,這種不一致致使了不少髒代碼的產生;
後端也懶於一遍遍地提供相似的接口。git
因而,咱們就採用了 GraphQL
來解決這個問題。github
這裏要跟你們明確下咱們的項目背景,在採用 GraphQL 前:redux
後來,後端決定只使用 GraphQL 的 query 功能,也就是隻 GET,其它 http 動做仍然走 RESTful api。segmentfault
若是你的項目是全盤採用 GraphQL 的,下面的實踐分享可能不適合你,僅供參考。後端
GraphQL 整體仍是比較先後端分離的,不強制你使用某一種 client 方案。從 awesome-graphql
這個庫,進入咱們視野的主要有兩個api
先說說 Relay。
Relay 是官方出品和推薦的,也是默認的配套方案。文檔和解決方案更齊全一點。框架
我粗略掃了一下 Relay 的文檔,從它提供的 api 推測,Relay 不只僅處理 GraphQL,還接管了狀態管理等等,理論上用了 Relay 能夠不用 Flux 、Redux 了。
考慮到可能和咱們現存的 Redux 方案可能衝突,就放棄了。
而後是 Apollo。
Apollo 在 github 上 star 也很多,文檔乍看也還不錯,除 React 外還適配多個框架。
並且有專門提到和 Redux 集成的章節:Integrating with Redux | Apollo React Docs。
時間緊迫,沒有想那麼多,我就用了(手動捂臉哭)。
過後來看,Apollo 的坑很多。並且最終 Apollo 與其說是和 Redux 集成起來,不如說是隔離開來了,由於 Apollo 也至關於單獨維護本身的一個 store。這讓我反思是否最初使用 Relay 也會獲得一樣甚至更好的結果。
無論怎麼說,若是你也上了 apollo-client 的賊船,那麼但願本系列文章能讓你少採一點坑。