3.4 Redux-Saga
原 Redux 流程為先對 Component 做 connect
,之後便可使用 Store 的 dispatch
觸發預先在 Reducer 中寫好的邏輯。
而 Redux - Saga 的流程同樣是先對 Component 做 connect
,但 dispatch
觸發的事件為 React - Saga 預先訂閱的名稱,在該事件裡才依照流程去觸發需執行的 Reducer 邏輯。
原本被 dispatch
觸發的 Method 從 Reducer 變成 Redux - Saga 。
function * --> Generator Function
Generator Function 能夠配合 yield
在執行的過程中喊停。
yield
call 執行function yield call(function, arg1, arg2)
put 觸發dispatch
Call vs Fork
saga 中 call 和 fork 都是用來執行指定函数 fn,區別在於:
call effect 會阻塞當前 saga 的執行,直到被調用函数 fn 返回结果,才會執行下一步代碼。
fork effect 則不會阻塞當前 saga,會立即返回一個 task 對象。
function fn() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('hello saga');
}, 2000);
});
}
function* fetchData() {
// 等待 2 秒後,印出歡迎詞(阻塞)
const greeting = yield call(fn);
console.log('greeting: ', greeting);
// 立即打印 task 對象(非阻塞)
const task = yield fork(fn);
console.log('task: ', task);
}
Last updated
Was this helpful?