“你不能放置也就是从 saga 调度冻结的动作” - Redux Saga

问题描述

这是我的第一个stackoverflow问题,如有错误请见谅。

我是 React、redux 和 saga 的初学者。 我正在尝试分派一个将由 saga 处理的动作,然后从 saga 中分派另一个动作。当我这样做时,我收到以下错误消息:

“你不能放置(也就是从 saga 调度)冻结的动作。我们必须 为这些操作定义一个特殊的不可枚举属性 调度目的。否则无法沟通 在传奇和其他订阅者之间正确地(动作排序会 变得更不可预测)。如果您正在使用 redux 并且您很在意 关于此行为(冻结操作),那么您可能想要切换 在中间件而不是在动作创建者中冻结动作。 示例实现:

const freezeActions = store => next => action => next(Object.freeze(action))"

我没有在任何地方明确地冻结我的行动。我只是调用一个返回动作对象的函数。我不明白为什么传奇抱怨它的冻结对象。

在这个沙箱中重现了我的错误https://codesandbox.io/s/elastic-zhukovsky-ntmfn

解决方法

所以解决方案非常简单。当我尝试导入操作创建者函数时,我没有在 {} 中导入。动作创建者不是从定义它的地方默认导出的。

import { setSnackbar } from "../../ducks/snackbar"; //---> senSnackbar should be imported within brackets.
//import setSnackbar from "../../ducks/snackbar"; //->dont do this
import { call,put } from "redux-saga/effects";

export function* handleCheckCoin(action) {
  try {
    let strSymbol = action.payload;
    console.log("Symbol : " + JSON.stringify(strSymbol));
    ///send out a api request to check Crypto Symbol is valid
    yield put(setSnackbar(true,"success","message"));
  } catch (error) {
    console.log("error while launching set snack bar action : " + error);
  }
}