React Query 筆記
一直以來都是使用Redux做state management,自然而然的API calls也是使用redux的thunk邏輯來做。 才發現最近興起的使用react-query或rtk-query去做API calls。
“data fetching and caching” is really a different set of concerns than “state management”.
Redux
是state management的library,專門focus在client side的state management。
使用Redux Thunk並將API資料再轉存到store會遇到問題
- 不會幫你確認是否store已經有資料,而避免API calls
- 在useEffect內call API,時機會被拉到functional component mount完後才call
- API資料需要自行放入store中,若同一個資料在不同頁面的slice都會用到,就需要每個slice都去寫extraReducers去更新state
我使用Redux開發所遇到的其他問題
- dispatch後,經過多道手續才會更新到component上導致效能會變差(在較大的app會比較明顯)
- 限制了react的設計自由度
- ex: 必須follow store裡面的型別限制等等
- ex: 使用react-hook-form,就比較難把store裡面的值拿來當預設值
React Query / RTK Query
相較於Redux store關注UI的state management,Query Library關注於server side的state,幫助前端去同步server side的state資料。RTK Query是Redux Toolkit所提供的Query功能。
- server side的資料有更新,透過mutation去更新server side資料後,告訴某個tags (or keys)的資料已經無效。需要重新再query一次。
- 若資料未過期,重新再使用useQuery會直接拿到cache資料不需要重新發request
- 在functional component不用等到mount完才call API