问题描述
这是我的第一个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);
}
}