redux-saga中的选择出现问题,错误:call:{context,fn}类型的参数具有未定义的或空的“fn”

7vux5j2d  于 2023-01-17  发布在  其他
关注(0)|答案(2)|浏览(85)

在看了一些类似问题的答案后,我无法让我的选择器工作。下面是我的selector.js:

export const getButtonStatus = state => state.buttonStatus;

(That是整个文件。我不知道是否需要导入任何内容。从我在这里看到的其他答案来看,似乎不需要。)
这就是我在我的 Saga 中试图访问选择器的地方:

import { takeLatest, call, put, select } from "redux-saga/effects";
import { getButtonStatus } from "./selector.js";
...
export function* watcherSaga() {
  yield takeLatest("get-tweets", workerSaga);
}

function* workerSaga() {
  try {
    const buttonStatus = yield select(getButtonStatus);
    const response = yield call(getTweets(buttonStatus));
    const tweets = response.tweets;
    yield put({
      type: "tweets-received-async",
      tweets: tweets,
      nextTweeter: response.nextTweeter
    });
  } catch (error) {
    console.log("error = ", error);
    yield put({ type: "error", error });
  }
}
...

下面是我收到的错误:

Error: call: argument of type {context, fn} has undefined or null `fn`

我刚到 Saga ,谁能告诉我哪里做错了?

hyrbngr7

hyrbngr71#

错误不在选择器,而在yield call-它将函数作为一个arg,后跟传递给函数的参数:https://redux-saga.js.org/docs/api/#callfn-args。所以应该是:
const response = yield call(getTweets, buttonStatus);
否则看起来不错!

cgh8pdjw

cgh8pdjw2#

问题
您可能正在执行以下操作:

const foo = yield call(bar())

因此,您不传递函数本身,而是传递函数调用。
修复
尝试只发送函数,而不发送其调用。

const foo = yield call(bar)

注意,我们只有bar,而没有bar()

相关问题