任何人都可以告诉我在减速器功能上使用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
}
他们都工作
我的问题:
我不知道什么会更好。有什么区别?
为什么我会使用其中一个?
此外,我无法在内部调用操作logger.save(...)
rejected
。为什么存在此chain
功能?
感谢您的帮助:)
答案 0 :(得分:1)
A)使用链(OnError)将在源(已拒绝)减速器完成后触发操作。在您的商店中创建新的电话。
B)您正在更改源减速器调用中的状态
你的问题:
1,2)使用链接将使您的代码更具可读性,因为下一个函数与源reducer并置,但是在索引组中将它发生在将对该部分存储发生的所有操作。
3)直接在reducer函数中调用动作函数。是一种反模式。这是在调度操作的中间调度操作。 reducer将在不一致的数据上运行。
答案 1 :(得分:0)
Redux的主要观点之一是可预测性。我们应该尽可能多地使用pure
函数。减速剂一定不能有任何副作用。
最近我处理了相同的功能 - 错误(用户操作等)日志记录。我认为所有这些行动都是side-effects
。它们对用户没有利润,也不能成为主要业务逻辑的一部分。
这就是我使用custom middleware
捕获我需要记录的所有操作的原因。我需要记录的操作我标记了一些meta-prop
(例如{log: 'errorLog'}
),并在中间件中检查了每个操作。如果它有log
道具,那么我会做一些记录器魔法。
最后,我已经清楚地理解了代码,其中所有日志记录副作用都包含在中间件中。