每當 Relay 正在滿足資料需求時,知道特定的事件在何時發生很有用。例如,我們可能會想要紀錄資料到可以使用需要花多長的時間,或是我們可能會想要把 error 記錄到伺服器。這些事件在大多數 Relay APIs 上可以藉由 onReadyStateChange
callback 使用。
onReadyStateChange
#當 Relay 滿足了資料時,會用一個描述當下「ready state」的物件呼叫 onReadyStateChange
callback 一次或數次。這個物件有以下屬性:
ready: boolean
當需要的資料的子集都準備好可以 render 的時候,這是 true。
done: boolean
當所有的資料需求都準備好可以 render 的時候,這是 true。
error: ?Error
如果失敗的話,這是一個 Error
的實體。反之,這會是 null
。
events: Array<ReadyStateEvent>
This is an array of events received so far (see ReadyStateEvent
below).
stale: boolean
當「正在 force fetch」時,在伺服器請求完成之前,如果因為資料在客戶端可用而 ready
是 true,那這會是 true。
aborted: boolean
是否請求已經被中止。
ReadyStateEvent
#ABORT
CACHE_RESTORED_REQUIRED
CACHE_RESTORE_FAILED
CACHE_RESTORE_START
NETWORK_QUERY_ERROR
NETWORK_QUERY_RECEIVED_ALL
NETWORK_QUERY_RECEIVED_REQUIRED
NETWORK_QUERY_START
STORE_FOUND_ALL
STORE_FOUND_REQUIRED
如果客戶端的資料不夠,導致 Relay 發送伺服器請求以獲得更多資料,我們可以預期有以下的行為:
ready
被設成 false。ready
和 done
被設成 true。如果客戶端有充足的資料可以使用,這樣 Relay 不需要發送伺服器請求,我們可以預期有以下的行為:
ready
和 done
被設成 true。如果伺服器請求發生載入資料失敗,我們可以預期有以下的行為:
ready
被設成 false。error
被設成一個 Error
物件。要注意 ready
和 done
依然會是 false。
如果發生「force fetch」而且客戶端的資料不夠,可以預期會有跟從伺服器抓取資料一樣的行為。但是,如果發生「force fetch」而且有充足的資料在客戶端可以 render,我們可以預期有以下的行為:
ready
、done
和 stale
被設成 true。ready
和 done
被設成 true,不過 stale
被設成 false。