在前一篇關於Apollo Client
的博客中已經說明了Apollo Client
是一個強大的JavaScript GraphQL
客戶端。既然是一個JavaScript
的客戶端,他確定就要遵照ES
的規範。
下面是Apollo Client
的Query
的代碼:數組
<Query query={CURRENT_PERSON}> {({ loading, error, data }) => { if (loading) return <Text>Loading...</Text> if (error) return <Text>`Error!: ${error}`</Text> const { currentPerson } = data return ( // 向子組件中傳遞currentPerson ) }} </Query>
分析:
這段Query
是用來獲取當前登錄用戶的信息。在Apollo Client
封裝好的Query
組件中有一個箭頭函數,箭頭函數的函數體主要是用來執行React-Native
渲染頁面的。看一下官網中在Mutation
中對於解構賦值的描述。
爲了便於在UI
中跟蹤Mutation
結果,在渲染時將Mutation
的結果解構成loading, error
。
這就說明了,在箭頭函數的參數中{ loading, error, data }
是一個解構賦值的表達式,將QueryResult
解構賦值成data 或 loading 或 error
。只要QueryResult
中有一個結果,那麼在表達式中就會將這個值解構賦值出來。 這樣在函數體中就會根據解析的結果不一樣執行不一樣的操做。函數
在ES6
中容許按照必定的模式從數組和對象等中提取值,而後對變量進行賦值,這被稱爲解構賦值。通常是經過模式匹配的方式進行賦值。
目前所接觸到的解構賦值的場景一共有五類,以後有新認識的會進行不斷的補充。
第一類:數組的解構賦值學習
let [a,b] = [1,2] // a爲1,b爲2 let [b,a] = [1,2] // a爲2,b爲1
undefined
let [a,b,c] = [1,2] // a爲1,b爲2,c爲undefined
...
的形式是ES6
的延展操做符,在開發中常用,尤爲是在React-Native
中使用延展操做符從父組件向子組件傳遞數據是很是方便的,不須要將全部的屬性都點出來並接收以後再傳遞。let [a, ...b] = [1,2,3,4] // a爲1,b爲[2,3,4]
undefined
,同第3項。let [a] = [1,2] // a爲1
let[a,[b,c],d] = [1,[2,3],4] //a=1,b=2,c=3,d=4
undefined
】let [x=1] = [null] console.log(x) //爲null
在這裏x輸出的值不是undefined
,而是null
,他解構的目標就是不存在的,是null
,不是未定義undefined
。所以他的輸出值爲null
。spa
第二類:對象的解構賦值prototype
let {second,first} = { first: "ff", second:"ss" } // second爲ss, first爲ff
let {first:second } = { first: "ff", second:"ss" } // second爲ff, first報錯:first is not defined
let person = { firstPeple: {name: "zs", age: 22} } let { firstPeple:{ name, age } } = person console.log(name) // zs console.log(age) // 22
undefined
,解釋說明和數組的默認值相似。第三類:字符串的解構賦值
字符串在處於解構賦值的環境中時被暫時看做是一個相似數組的對象,所以他的每個字符均可以當作數組的每一項。這裏就再也不解釋說明了。code
第四類:布爾值和數值的解構賦值
這類解構賦值目前爲止我並未在實際開發中遇到,之後遇到會結合實際狀況進行說明。
解構賦值時,若是等號的郵編時數值或者是布爾值,那麼他就會先轉換成對象,再進行解構賦值。對象
let {toString: a} = 123 console.log(a) console.log(Number.prototype.toString) console.log(Number.prototype.toString === a) // true
在這裏,轉換成的對象都具備toString
屬性,所以相應的變量均可以取到值。
第五類:函數參數的解構賦值blog
function add([x + y]){ console.log(x+y) // 輸出3 } add([1,2])
上邊的普通函數是將一個數組進行的解構賦值。一樣的在函數的參數中還能夠放對象的解構賦值。在開頭的背景中,就是在箭頭函數的參數中對一個Query
查詢的返回值對象進行解構賦值。圖片
從實際應用中去學習,複習,雖然所遭遇的坑會很是多。可是這一路走來,收穫的將會很是的多。ip