【问题标题】:ReactJS / Redux call to dispatch action in other reducerReactJS / Redux 调用在其他 reducer 中调度操作
【发布时间】:2018-05-07 17:51:38
【问题描述】:

如何在其他 reducer 中调度操作。 例如,我使用开关盒ADD_LOGREMOVE_LOG 创建减速器LogsReducer。代码:

const addLog = (text) => ({type: 'ADD_LOG', text});
const removeLog = (id) => ({type: 'REMOVE_LOG', id});

const logsReducer = (state = {}, action) => {
  switch (action.type) {
    case 'ADD_LOG':
       // todo
    case 'REMOVE_LOG':
       // todo
    default:
      return state;
  }
};

我将logsReducer 添加到combineReducers。 为了调度操作,我在mapDispatchToProps 内部调用它。

dispatch(addLog('sample log'));
dispatch(removeLog(2);

还有这里的问题。如何允许从日志减速器外部发送消息。例如来自其他减速器中的获取响应,例如。 contactReducer?

【问题讨论】:

  • 所有action都发送给所有reducer,所以如果action.typeADD_LOGcontactReducer也可以switch就可以了。
  • 您必须问自己的唯一问题是您的操作是否必须按特定顺序运行,如果不是,那么@DavinTryon 他的答案就是您需要的,如果它们确实必须按顺序运行一定的顺序,那么你将需要某种中间件
  • 是的,但是contactReducer 是一个不同的reducer。在switch 中没有这种情况。你知道,我想记录用户事件并将其推送到键 logs (logsReducer)
  • @icepickle Ohhh 也许中间件是一个答案,我检查一下
  • 但是,如果他们彼此之间没有任何关系,那么您不应该在调度程序中处理日志吗?我不明白减速器如何帮助你?您可以添加要记录的内容以及要记录的位置吗?也许创建一个包装调度程序的高阶函数可能会更好?

标签: reactjs redux dispatch


【解决方案1】:

如何允许从日志减速器外部发送消息。例如来自其他减速器中的获取响应,例如。联系减速机?

通常存在异步 API 调用或动作调度队列意味着表示/域逻辑由 流程 组成,因此需要流程管理器来解决该任务。

一般的解决方案是redux-saga,它结合了中间件和实时进程管理器。使用saga,组件只需通知逻辑发生的动作,然后saga 执行API 调用,产生新的动作,甚至执行Optimistic updates

此外,使用redux+saga 方法,您的 Web 应用程序会自动成为全栈事件源应用程序:通过编写前端代码,您还将获得同构的后端代码(如果使用类似 https://github.com/reimagined/resolve 的工具)

查看使用 saga Infinite loop with redux-sagahow to setstate after saga async request 的实践

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2016-08-17
    • 2017-11-09
    • 2017-05-22
    • 1970-01-01
    • 2021-02-17
    相关资源
    最近更新 更多