我想弄清楚如何將同一個動作類型的多個任務取消在傳奇傳奇中。基本上,當我的組件在componentWillUnmount()
時,我想取消它可能已經開始的所有任務。還原傳奇:取消同一動作類型/傳奇的多個任務
如果我有以下行爲(這是很大的,從我確實有我的代碼簡化,但我試圖削減下來的要領):
// Action
export const loadMyData = params => {
let url = /* Create URL based on params */
return {
type: FETCH_DATA,
url,
key: /* a unique key so we can retrieve it in the state later */
}
}
而下面的傳奇:
// Saga
export function* fetchData(action) {
try {
// 'callApi()' currently uses axios
let response = yield call(callApi, action.url);
yield put({
type: FETCH_SUCCESS,
key: action.key,
payload: response.data
});
} catch(error) {
yield put({
type: FETCH_FAILURE,
error
});
}
}
export function* watchFetchData() {
while (true) {
let action = yield take(FETCH_DATA);
let task = yield fork(fetchApi, action);
}
}
如上所述,組件可以多次調用loadMyData()
。此外,還可能有其他組件,也稱爲loadMyData()
。所以我試圖找到一種方法來取消只有處於componentWillUnmount()
狀態的組件的任務,但保留其他正在運行的任務不變。
在Redux Saga Cancellation documentation中,他們的示例適用於需要執行取消操作的單個任務。我無法弄清楚如何將其擴展到我的用例。