如何将重击动作转换为英雄传奇

问题描述 投票:0回答:1

我是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,
          }));
        })
    };
reactjs redux action redux-saga redux-thunk
1个回答
0
投票
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视频或官方文档进行清晰说明,但我认为英雄传奇比笨拙要容易理解。

© www.soinside.com 2019 - 2024. All rights reserved.