介紹
因為 Query method 還滿多的 ,這次繼續來介紹好用的 Query mehtod Api
data.startPolling:通常如果會希望固定一個時間 ,向Server發送 請求fetch 就可以使用 startPolling,反之就使用 this.props.data.stopPolling() 來停止這個動作
class MyComponent extends Component {
componentDidMount() {
// 除了直接設定也可以使用 options.pollInterval設定
this.props.data.startPolling(1000);
}
render() {
// ...
}
}
export default graphql(gql`query { ... }`)(MyComponent);
data.updateQuery(updaterFn):在ApolloData裡面通常都會有 query cache 但有時會使用到mutation對資料庫操作(新增刪除修改等等) 就會需要使用 updateQuery,要注意的是這個 method 不會異動到 Server 的資料,只對 Store(cache) 去做 update
(previousResult, { variables }) => nextResult
options的設定
options.fetchPolicy
ApolloData 默認情況下,元件將嘗試從緩存中讀取,如果查詢的數據在 cache 中,那麼 Apollo 只是從緩存中返回數據。如果查詢的數據不在緩存中,則Apollo將使用網絡執行Fetch。但通過選項可以改變行為。
cache-first:嘗試從緩存中首先讀取數據。如果查詢所需的數據都在緩存中,那麼將返回該數據。如果緩存結果不可用,Apollo將會從網絡中獲取。這個策略減少渲染組件時發送的網絡請求數量。
cache-and-network:這會讓Apollo首先嘗試從緩存中讀取數據。如果完成查詢所需的所有數據都在緩存中,那麼將返回該數據。但是,無論整個數據是否在緩存中,這fetchPolicy將始終使用網絡接口執行查詢,cache-first而只有在數據不在緩存中時才會執行查詢。此策略讓用戶獲得快速響應進行了優化。
network-only:這永遠不會從緩存中返回初始數據。相反,它將始終使用您的網絡接口向服務器發出請求。特性是與 Server 的數據一致性。
cache-only:這永遠不會使用網絡查詢。相反,它從緩存讀取。如果數據不存在,則會拋出錯誤。
總結
startPolling 對於定時要發request非常好用,另外 options.fetchPolicy 提供了四個策略可以選擇,不同情境選擇適合的 fetchPolicy 將會提高UX的使用體驗