redux-saga - redux-saga 效果中的无限循环

我已经能够创建一个无限循环,不断从 API 获取数据。

我使用 useEffect 条件调度来运行,它应该只运行一次。

但是当我查看 Redux DevTools 时,从 api 中检索数据是在一个无限循环中。

片:

import { createSlice } from "@reduxjs/toolkit";

const initialState = { cats: [] };

const catSlice = createSlice({
  name: "cat",
  initialState,
  reducers: {
    setCat: (state, action) => {
      state.cats = action.payload;
    },
  },
});

export const { setCat } = catSlice.actions;

export default catSlice.reducer;

佐贺:

import { call, put, takeLatest } from "redux-saga/effects";
import { setCat } from "./catSlice";

function* getCatsFetch() {
  const cats = yield call(() => fetch(`https://xxxapi.com`));
  const formatedCats = yield cats.json();
  yield put(setCat(formatedCats));
}

function* catSaga() {
  yield takeLatest("cat/setCats", getCatsFetch);
}

export default catSaga;

App.js 中的命令

useEffect(() => {
    dispatch(setCats());
  }, [dispatch]);

你能帮我停止对 api 的无休止的请求吗?谢谢

回答1

问题是您的 getCatsFetch 传奇会发出 setCat 动作。而您的 catSaga 正在等待任何 setCat 触发另一个 getCatsFetch 传奇。因此,即使您只从组件中调度一个 setCat 操作,saga 在成功运行后也会发出一个 setCat 。您正在循环中间件。

要更正此问题,您可能应该将 takeLatest 更改为寻找某种 getCats 操作,然后在您的组件中发出该操作。 (不是你的传奇)。

相似文章

随机推荐

最新文章