Redux-auto:动作链与索引缩减器

时间:2017-07-14 15:07:01

标签: javascript redux chaining redux-middleware

任何人都可以告诉我在减速器功能上使用chain与在index reducer

中的主redux-auto功能中工作之间的区别

我想保存错误,

A)store / chat / send.js

import actions from 'redux-auto'

//...

 function rejected(chat, payload, error){
  return chat;
} onError.chain = (c, p, error) => actions.logger.save(error)

//...

B)store / logger / index.js

import actions from 'redux-auto'
import save from './save'

export default function (errorsLog = [], action)
{
   if(action.type == actions.chat.send.rejected){
      return save(errorsLog,action.payload)
   }
   return errorsLog
}

他们都工作

我的问题:

  1. 我不知道什么会更好。有什么区别?

  2. 为什么我会使用其中一个?

  3. 此外,我无法在内部调用操作logger.save(...) rejected。为什么存在此chain功能?

  4. 感谢您的帮助:)

2 个答案:

答案 0 :(得分:1)

A)使用链(OnError)将在源(已拒绝)减速器完成后触发操作。在您的商店中创建新的电话。

B)您正在更改源减速器调用中的状态

你的问题:

1,2)使用链接将使您的代码更具可读性,因为下一个函数与源reducer并置,但是在索引组中将它发生在将对该部分存储发生的所有操作。

3)直接在reducer函数中调用动作函数。是一种反模式。这是在调度操作的中间调度操作。 reducer将在不一致的数据上运行。

答案 1 :(得分:0)

Redux的主要观点之一是可预测性。我们应该尽可能多地使用pure函数。减速剂一定不能有任何副作用。

最近我处理了相同的功能 - 错误(用户操作等)日志记录。我认为所有这些行动都是side-effects。它们对用户没有利润,也不能成为主要业务逻辑的一部分。

这就是我使用custom middleware捕获我需要记录的所有操作的原因。我需要记录的操作我标记了一些meta-prop(例如{log: 'errorLog'}),并在中间件中检查了每个操作。如果它有log道具,那么我会做一些记录器魔法。

最后,我已经清楚地理解了代码,其中所有日志记录副作用都包含在中间件中。