1.fork
創建一個新的進程或者線程,并發發送請求。
function* user() {
yield takeEvery('FETCH_REQUEST', fetch_user); // 監聽 FETCH_REQUEST action
}
// 并發發送請求
function* fetch_user() {
const [users, todos] = [
yield fork(fetchResource, 'https://jsonplaceholder.typicode.com/users'),
yield fork(fetchResource, 'https://jsonplaceholder.typicode.com/todos')
]
}
function* fetchResource(resource) {
const data = yield call(axios.get, resource);
// 獲取 call 數據,觸發成功后的 action
yield put({ type: 'FETCH_SUCESS', uu: data });
}
2.call
發送 api 請求
3.put
發送對應的 dispatch,觸發對應的 action
4.takeEvery
監聽對應的 action;
每一次 dispatch 都會觸發;例如:點擊一個新增的按鈕,2s 后觸發新增動作,在2s內不斷點擊按鈕,這時候,每一次點擊,都是有效的。
5.takeLatest
監聽對應的 action;
只會觸發最后一次 dispatch;例如:點擊一個新增的按鈕,2s 后觸發新增動作,在2s內不斷點擊按鈕,這時候,只有最后一次點擊是有效的。
6.all
跟 fork 一樣,同時并發多個 action,沒有順序。
const rootUser = [
user(),
todo()
];
yield all([ // 同時并發多個
...rootUser, //
add()
]);