當發起 dispatch 到 UI 更新之間做什麼事情
希望 dispath 有能力可以再去做其他事情(所以會在過程中去做一些邏輯)
希望過程中可以再做些事情(UI 從 dispatch 到真正渲染之間)
實際上是一個 function
next 是 dispatch 的意思,next 所代表的是傳入 action ,會調用下一個 dispatch 來執行所傳入的這個 action
以官網範例:
- 他是 3 個函式包在一起
1 | const logger = store => nextDispatch => action => { |
在專案建立
位置:src / middleware
簡易說明
在 return 最後的 function 之前,第二個 function 就是將原有的 dispatch 丟到最後的 function 中,再 return 出去。
在取的 dispatch 之前,會再拿到 store 也是使用 api 時候會回傳進來的東西。
當 middleware 建立好之後,要到 store 當案進行宣告
combineReducers
- 建立的 slice夾中可能會有多個 reducer,例如 todoReducer, friendReducer, phoneReduce…
Middleware 與 store 的建立
在 middleware 去寫功能的時後,主要分為兩個部分
- 在 dispach 之前要做什麼事情
- 在 dispach 之後要做什麼事情
RTK Query
使用 middileware 去定義我們的 reducers 會分成多個階段
- pedding
- success
- error
針對每一次 API 取資料,加入到 reducers 中,此方式會使得 reducer 變得龐大、複雜。
RTK Query 協助將所有關於 call API 或是 獲取資料過程的功能,將他包裝成一個攻能,並且完全獨立於 reducer 或 redux 的邏輯 - 可以使用 RTK Query 中的 hook 去獲取當前 data , error 狀態等
官方文件
建立 api
educerPath => 最後會產生 reducer ,所包含內容會有 pedding, success,error 等狀態
baseQuery => 就是放入 baseUrl
endpoint => 放入 query 資訊
any : 表示會回傳一個 any 結果
string : 需要傳入 string 的 input
json placeholder
1 | import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react' |
至 store 新增 todoAPI
引用 API hook
import { useGetTodoApiQuery } from './services/todoApi';
1 | import './App.css'; |
若是使用 react thunk
- 這裡的 middleware 的 reducer 中的 status 要自己去定義
- 優點:可以完全掌控自己 reducer 的內容
- 但相對也會較為繁瑣