GraphQL 基礎(chǔ)教程

前置知識:React/Redux/Restful API

關(guān)于為什么要使用GraphQL 前面已有幾篇文章鋪墊,這里主要總結(jié)用法。開始使用GraphQL之前,要安裝一些依賴:

apollo-boost 包含啟動阿波羅客戶端的所有依賴
react-apollo  視圖層面的集合
graphql-tag  解析查詢語句必須
graphql 也是解析查詢語句

強(qiáng)烈安利https://codesandbox.io運(yùn)行實(shí)踐,可以減少電腦文件夾的凌亂感……下圖是安裝依賴的步驟:

安裝依賴

初始化完成后,頁面顯示正常。這時(shí)需要從依賴?yán)镆霂讟訓(xùn)|西:

引入ApolloClient并新建一個(gè)實(shí)例client;
引入ApolloProvider并且包裹頁面組件,ApolloProvider有一個(gè)屬性client用于連接GraphQL和React,它的用法類似Redux里的Provider。
引入gql用于解析GraphQL;
引入Query組件用于包裹頁面組件。

Query組件是這個(gè)項(xiàng)目里面最重要的組件之二,另外一個(gè)是Mutation??梢哉J(rèn)為他們分別對應(yīng)著Restful API 里面的GET和POST/PUT/DELETE等功能。
以下圖查詢狗類品種為例,在第12行g(shù)ql語句部分聲明查詢狗的id和breed種類。然后第28行將該查詢語句作為Query組件的query屬性值,在第33行渲染部分,我們遍歷返回值,在頁面顯示所有的狗的品種名稱,得到右圖的結(jié)果。

查詢狗的品種

如果我們只想查詢某一品種的狗的圖片,可以通過variables屬性傳遞參數(shù),在第16行查詢語句里新增查詢的字段名,第23行傳遞我們想查詢的實(shí)參mix,第28行添加形參breed品種,右圖也成功地查詢到了該品種的圖片。
傳參查看具體品種的圖片

Query部分的基本用法就是這樣,如果還有顯示加載狀態(tài)、錯(cuò)誤處理、輪詢和重新獲取的需求,可以繼續(xù)參閱文檔。https://www.apollographql.com/docs/react/essentials/queries.html
相比Query部分,Mutation部分復(fù)雜一點(diǎn),但是道理是相通的。這里以(萬年不變的)新增和編輯TODO為例,項(xiàng)目包括1個(gè)Query和2個(gè)Mutation,Query部分總是查詢當(dāng)前的待辦事項(xiàng),Mutation部分則是處理新增和編輯的操作。
新增編輯待辦事項(xiàng)例子

可以看到,兩處的gql語句的寫法,我們要拿到的值只有事項(xiàng)的id 和 事項(xiàng)內(nèi)容的type 兩個(gè)。
兩條mutation語句

寫一個(gè)輸入框,點(diǎn)擊新增按鈕后,輸入框的內(nèi)容便新增到了頁面,Mutation的屬性只有mutation和children是必須的。
其他的屬性也可圈可點(diǎn),update有很多實(shí)用的方法,比如可以通過cache.readQuery 和 cache.writeQuery查詢和修改Query,就好像是和服務(wù)端通信一樣,update第二個(gè)參數(shù)是一個(gè)包含Mutation結(jié)果的對象。
optimisticResponse 可以讓頁面響應(yīng)更快,你的調(diào)用會被執(zhí)行兩次,一次是頁面的結(jié)果,另一次是真實(shí)的結(jié)果。比如一個(gè)評論功能,當(dāng)你點(diǎn)擊提交按鈕的時(shí)候,頁面立即就更新了而無需等待服務(wù)端響應(yīng)。
新增部分update第一個(gè)參數(shù)是cache

更新部分mutation嵌套在query里
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容