前面已經寫了一篇文章描述
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 Client
在React
環境下的集成包之一。
本篇文章就是Apollo Client
在React
環境下的集成包----React Apollo
前面說的很清楚了,apollo-client
是GraphQL
的JavaScript
客戶端工具。因此只要當你存在GraphQL
服務器時,你都可以在你的react
項目中使用react-apollo
構建一個組件用於從GraphQL
服務器中獲取數據。
一:創建Client
使用apollo-client
就一定要有一個實例去具體的實現各個功能,因此我們需要創建一個客戶端實例:client
在創建client
之前,首先要npm
一個包 apollo-boost
在apollo boost
中包含了多個至關重要的軟件包
apollo-client
: 客戶端功能的靈魂。apollo-cache-inmemory
: 一個強大的緩存管理包【前面幾篇關於緩存管理的都和他有關】apollo-link-http
: 用於獲取遠程數據的apollo
鏈接apollo-link-error
: 用於錯誤處理的apollo
鏈接apollo-link-state
: 用於本地狀態管理的apollo
鏈接
此時我們已經引入了這個包了。開始創建客戶端實例client
了。
import ApolloClient from "apollo-boost"
使用引入的ApolloClient
創建一個客戶端對象
const client = new ApolloClient({
uri: "//GraphQL服務器地址"
})
這個uri
是不可缺少的。因爲ApolloClient
是GraphQL
的客戶端工具,因此uri
地址也必須是GraphQL
服務器地址。
此時我們創建了ApolloClient
的客戶端實例,就可以使用apollo-client
的方法去和GraphQL
服務器進行交互。這裏因爲主要說react-apollo
就不再過多描述,之後我會寫一篇博客描述使用apollo-client
的原生方法,在組件的外部調用query
和mutate
去進行交互。
二:ApolloProvider
react
和react-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
進行數據交互。這些功能的實現依託於Query和Mutation組件,具體的實現,耐心的看一下官網。
三:最後的話
Apollo Client
確實是非常的強大,有些複雜的功能已經封裝好了。官方文檔很重要,我只是看了冰山一角,堪堪入門。要耐心,細心,用心。