“你不能把(又名 saga 中的 dispatch)冻结动作”——Redux Saga
Posted
技术标签:
【中文标题】“你不能把(又名 saga 中的 dispatch)冻结动作”——Redux Saga【英文标题】:"You can't put (a.k.a. dispatch from saga) frozen actions" - Redux Saga 【发布时间】:2021-04-12 21:58:03 【问题描述】:这是我的第一个***问题,如果有任何错误,请原谅。
我是 react、redux 和 saga 的初学者。 我正在尝试调度一个将由 saga 处理的动作,然后从 saga 中调度另一个动作。当我这样做时,我收到以下错误消息:
“你不能把(a.k.a. dispatch from saga)冻结动作。我们必须 为这些操作定义一个特殊的不可枚举属性 调度目的。否则无法沟通 在 sagas 和其他订阅者之间正确(动作排序将 变得难以预测)。如果你正在使用 redux 并且你关心 关于这种行为(冻结的动作),那么你可能想要切换 冻结中间件中的动作而不是动作创建者。 示例实现:
const freezeActions = store => next => action => next(Object.freeze(action))"
我没有在任何地方明确冻结我的操作。我只是调用一个返回动作对象的函数。我不明白为什么 saga 抱怨它的冻结对象。
我在这个沙盒中重现了我的错误:https://codesandbox.io/s/elastic-zhukovsky-ntmfn
【问题讨论】:
【参考方案1】:所以解决方案非常简单。当我尝试导入动作创建函数时,我没有在 中导入。动作创建者不是定义它的默认导出。
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);
【讨论】:
以上是关于“你不能把(又名 saga 中的 dispatch)冻结动作”——Redux Saga的主要内容,如果未能解决你的问题,请参考以下文章