javascript redux sagadolar中的美元符号标识符redux saga中的美元符号标识符

noj0wjuj  于 2023-03-16  发布在  Java
关注(0)|答案(1)|浏览(181)

在Axios get的 Saga 中,我想发送一个分页的get请求,但在第一种方法中,它返回undefined,而在第二种方法中,它工作正常。在第一种方法中,我在URL中使用了美元符号标识符。
第一:

function* workGetAllCats(action: any): any {
  let pageNumber = action.payload;

  let URL = `/api/admin/category?page=${pageNumber }`;

  const fetchAllCats = yield call(() => axios.get(URL));
  const formattedResponse = fetchAllCats.data;
  yield put(getAllCatsSuccess(formattedResponse));
}

function* catIndexSaga() {
  yield takeEvery("catIndex/getAllCats", workGetAllCats);
}
export default catIndexSaga;

第二:

function* workGetAllCats(action: any): any {
  let pageNumber = action.payload;

  const fetchAllCats = yield call(() =>
    axios.get(`/api/admin/category?page=${pageNumber}`)
  );
  const formattedResponse = fetchAllCats.data;
  yield put(getAllCatsSuccess(formattedResponse));
}

function* catIndexSaga() {
  yield takeEvery("catIndex/getAllCats", workGetAllCats);
}
export default catIndexSaga;

我想知道发生了甚么事,以及第一种方法与第二种方法有甚么分别

j5fpnvbx

j5fpnvbx1#

第一种方法:
一旦你到了。

const fetchAllCats = yield call(() => axios.get(URL));

URL已定义为undefined。因为JavaScript不返回:D
但是,第二种方法也是在您想要进行调用时构建URL。
由于pageNumber引用action.payload,这意味着它是由源代码引用参数,因此在第二次调用时,将定义pageNumber。
因此,您将获得一个新页码
第一种方法是不正确的。第二种方法可能更好,如果:

function* workGetAllCats(action: { payload: number }): any {
  const fetchAllCats = yield call(() => {
    let newURL = `/api/admin/category${action.payload ? `?page=${action.payload}}` : ''}`    
    axios.get(newURL)
  });
  const formattedResponse = fetchAllCats.data;
  yield put(getAllCatsSuccess(formattedResponse));
}

function* catIndexSaga() {
  yield takeEvery("catIndex/getAllCats", workGetAllCats);
}
export default catIndexSaga;

祝你好运兄弟:)

相关问题