我是redux传奇的新手。我在代码中单击按钮以调用操作以获取列表,还有一个按钮可以加载更多内容,并且调用相同的操作。我想检查我的传奇故事是否已经运行,然后避免执行新任务并取消它。因为有时用户单击按钮2次或3次。这是我的传奇代码,操作为 SET_FETCH_LIST_TYPE
import { takeLeading, all, call, put, take, select } from 'redux-saga/effects';
import request from 'utils/request';
import { push } from 'react-router-dom';
import { uniqBy } from 'lodash';
import { SET_FETCH_LIST_TYPE, SETTOOLSET, GET_TAXONOMIES } from './constants';
import { URL } from '../App/constants';
import {
typeListError,
typeListSuccess,
setDraftTypeList,
successTaxonomies,
} from './actions';
import { getDraftList } from './selectors';
export function* getTypes(payload) {
// const wpType = yield select(makeSelectTypes());
const existingTypes = yield select(getDraftList());
const types = yield call(getExistingTypes, payload.wpType, existingTypes);
if (types && types.length && payload.pageNumber === 1 && !payload.filter) {
console.log('iminside it baba')
yield put(typeListSuccess(types));
} else {
const requestURL = `${URL}${payload.wpType}?per_page=12&page=${
payload.pageNumber
}&_embed${payload.filter ? `&${payload.filter}` : ''}`;
try {
// Call our request helper (see 'utils/request')
const wpTypeList = yield call(request, requestURL);
yield put(typeListSuccess(wpTypeList, payload.filter));
const exTypes = [...existingTypes, ...wpTypeList];
const removeDuplicate = uniqBy(exTypes, e => e.id);
yield put(setDraftTypeList(removeDuplicate));
} catch (err) {
yield put(typeListError(err));
}
}
}
export function* getTaxonomies() {
// const wpType = yield select(makeSelectTypes());
const requestURL = `${URL}taxonomies`;
try {
const postTypes = yield call(request, requestURL);
const keys = Object.keys(postTypes);
const pages = yield all(
keys.map(x =>
call(
request,
`${URL}${postTypes[x].rest_base}${
x === 'genuine_location' ? '?_embed' : ''
}`,
),
),
);
yield put(successTaxonomies(pages));
} catch (err) {
yield put(typeListError(err));
}
}
export function* getExistingTypes(typeName, types) {
const typeList = types.filter(data => {
return typeName === data.type;
});
return typeList;
}
export function* setToolset(payload) {
yield put(push(`/newType/${payload.urlLocation}`));
}
// Individual exports for testing
export default function* typesSaga() {
yield takeLeading(GET_TAXONOMIES, getTaxonomies);
yield takeLeading(SET_FETCH_LIST_TYPE, getTypes);
yield take(SETTOOLSET, setToolset);
}