React Apollo:Apollo Client在React中的實現方式

前面已經寫了一篇文章描述
GraphQL,Apollo Client,PostgreSQL三者的關係和區別,已經說明GraphQL是一個標準,被稱爲是一個革命性的API工具。他和REST有着相當大的區別與優勢。GraphQL可以讓你在客戶端的請求中指定希望獲取到的數據。也就是你想要什麼數據就去請求什麼數據,可以隨時變更。
而傳統的REST只能先在服務器中進行預先定義,前端人員再調用接口去進行數據的請求和接收。這樣前後端人員的協作就會受到很大的影響。
GraphQL的官網中有這麼個描述:Apollo Client是一個強大的 JavaScript GraphQL 客戶端。被設計用於與React,React Native,Angular2,或者是原生JavaScript一起進行工作。
因此 Apollo Client這種GraphQL客戶端在面對不同的前端開發環境時他會有相應的集成包進行工作。而React Apollo 就是Apollo ClientReact環境下的集成包之一。
本篇文章就是Apollo ClientReact環境下的集成包----React Apollo
在這裏插入圖片描述
前面說的很清楚了,apollo-clientGraphQLJavaScript客戶端工具。因此只要當你存在GraphQL服務器時,你都可以在你的react項目中使用react-apollo構建一個組件用於從GraphQL服務器中獲取數據。

一:創建Client
使用apollo-client就一定要有一個實例去具體的實現各個功能,因此我們需要創建一個客戶端實例:client
在創建client之前,首先要npm一個包 apollo-boost
apollo boost中包含了多個至關重要的軟件包

  1. apollo-client: 客戶端功能的靈魂。
  2. apollo-cache-inmemory: 一個強大的緩存管理包【前面幾篇關於緩存管理的都和他有關】
  3. apollo-link-http: 用於獲取遠程數據的apollo鏈接
  4. apollo-link-error: 用於錯誤處理的apollo鏈接
  5. apollo-link-state : 用於本地狀態管理的apollo鏈接
    此時我們已經引入了這個包了。開始創建客戶端實例client了。
import ApolloClient from "apollo-boost"

使用引入的ApolloClient創建一個客戶端對象

const client = new ApolloClient({
  uri: "//GraphQL服務器地址"
})

這個uri是不可缺少的。因爲ApolloClientGraphQL的客戶端工具,因此uri地址也必須是GraphQL服務器地址。
此時我們創建了ApolloClient的客戶端實例,就可以使用apollo-client的方法去和GraphQL服務器進行交互。這裏因爲主要說react-apollo就不再過多描述,之後我會寫一篇博客描述使用apollo-client的原生方法,在組件的外部調用querymutate去進行交互。

二:ApolloProvider
reactreact-native有着分不清的關係,下面的描述中就以react統稱。
react項目中使用apollo-client的前提條件就是能夠提供一個apollo-client實例。但是如果apollo-client的實例在react-native中直接使用方便的話,那還要react-apollo幹什麼??因此他就要依靠react-apollo中的ApolloProvider組件將apollo-client創建出來的的client實例傳遞給react組件樹。這樣在react項目中才能夠使用apollo-client
因此,我將react-apollo比喻成中國式英語。

import { ApolloProvider } from 'react-apollo'

接下來client會依靠這個組件,全面覆蓋影響到整個react組件樹
注意:ApolloProvider必須是在根組件之上,否則會影響到apollo的一些功能。

 <ApolloProvider client={client}>
    <RootComponent />
  </ApolloProvider>,

接下來就可以使用react-apollo中的組件了,很方便的和GraphQL進行數據交互。這些功能的實現依託於QueryMutation組件,具體的實現,耐心的看一下官網。
三:最後的話
Apollo Client確實是非常的強大,有些複雜的功能已經封裝好了。官方文檔很重要,我只是看了冰山一角,堪堪入門。要耐心,細心,用心。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章