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

Redux-auto: action chaining vs index reducer

谁能告诉我使用chain on a reducer function and doing work in the main index reducer function in 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. 此外,我不能只在 rejected。为什么存在此 chain 功能?

感谢您的帮助:)

Redux 的主要特点之一是可预测性。我们应该尽可能多地使用 pure 函数。 reducer 绝对不能有任何副作用。

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

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

最后,我得到了清晰易懂的代码,其中所有的日志副作用都封装在中间件中。

A) 使用 chain(OnError) 将在 source(rejected) reducer 完成后触发操作。在您的商店中创建一个新电话。

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

您的问题:

1,2) 使用链接将使您的代码更具可读性,因为下一个函数与源减速器并置,但将它放在索引组中,所有操作都会发生在商店的那部分。

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