我是redux-saga的新手,正在尝试进行一个简单的演示工作,该工作进行API调用并执行分页。据我了解,redux-saga流程应按以下方式工作。页面大小用于限制api调用时要显示的数据数量。
const PAGE_SIZE = 1;
export const fetchItems = page => (dispatch, getState) => {
const state = getState();
const offset = page * PAGE_SIZE;
dispatch(setItemsCurrentPage(page));
if (getIsPageFetched(state, page)) {
return;
}
dispatch(fetchItemsRequest());
fromItems.fetchItems({
limit: PAGE_SIZE,
offset,
})
.then((response) => {
const pageCount = Math.ceil(response.count / PAGE_SIZE);
dispatch(fetchItemsResponse({
items: response.results,
page,
pageCount,
}));
})
};
import { call, put, select } from "redux-saga/effects";
import {selectState} from "./selectors";
export function* fetchItems(page) {
try {
const state= yeild select(selectState())
const offset=page * PAGE_SIZE;
yield put(setItemsCurrentPage(page));
/**for api calls you need use **call** method**/
const data={limit:PAGE_SIZE,offset};
const requestUrl = `${url}`;
const options = {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(data)
};
const response = yield call(request, requestUrl, options);
const pageCount = Math.ceil(response.count / PAGE_SIZE);
yield put(fetchItemResponse({items:response.results,page,pageCount}))
} catch (e) {
yield put(assignLawyerLoadingError(e));
}
}
*注意选择器基本上用于从状态获取数据,在thunk中,我们使用getState()并导航到数据,但是在thunk中,您需要选择器来访问特定状态数据。Put用于设置要存储的数据(基本上是一个动作),call用于api命中。请通过一些帖子,youtube视频或官方文档进行清晰说明,但我认为英雄传奇比笨拙要容易理解。