“你不能把(又名 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的主要内容,如果未能解决你的问题,请参考以下文章