Redux 传奇正在返回不是我操作的有效渠道

Posted

技术标签:

【中文标题】Redux 传奇正在返回不是我操作的有效渠道【英文标题】:Redux saga is returning is not a valid channel on my actions 【发布时间】:2021-12-20 16:14:41 【问题描述】:

我正在尝试使用我的 redux saga 函数并希望在 checkError redux saga 函数上传递错误:

export function* onCheck(payload) 
  try 
    if (internetConnected) 
      const response = yield call(checkApi, payload);
      if (token) 
          // do something
      
     else 
      yield put(authenticateError, 'No Internet');
    
   catch (error) 
    yield put(checkError, error);
   

我的行动是这样安排的:

export const checkError = (error) => 
  return 
    type: type.CHECK_IN_ERROR,
    error,
  ;
;

我的减速器是这样的:

export default function (state = initialState, action) 
 case type.CHECK_IN_ERROR:
      return 
        ...state,
        error: action.payload,
      ;

当我加载这个并尝试检查在我的 try/catch 上捕获错误时,它会抛出这个错误:

ExceptionsManager.js:114 Error: put(channel, action): argument function checkError(error) 
    return 
      type: type.CHECK_IN_ERROR,
      error: error
    ;
   is not a valid channel

不确定我在这里做错了什么。请帮忙。

【问题讨论】:

【参考方案1】:

您错误地使用了put 效果。除非您使用自定义通道(非常罕见),否则您将始终只有一个参数。

// wrong
yield put(fn, arg1, arg2);

// correct
yield put(fn(arg1, arg2))

API 参考:https://redux-saga.js.org/docs/api#putaction

【讨论】:

以上是关于Redux 传奇正在返回不是我操作的有效渠道的主要内容,如果未能解决你的问题,请参考以下文章

Redux Thunk操作,axios返回多个值

将异步操作分派到 redux-saga 后如何捕获 redux 存储中的更改

Redux 状态未在 Redux DevTool 中更新

带有 axios 返回多个值的 Redux Thunk 操作

Redux 状态发生了变化,为啥不触发重新渲染? (Redux 传奇)

Redux getState 在行动中不起作用