【发布时间】:2018-12-01 13:26:24
【问题描述】:
这个问题可能有重复,但它们不能很好地回答我的问题。所以我决定开始一个新线程。
所以我正在尝试为电子商务应用程序创建一个简单的购物篮组件......
以下是 reducer 和 action 文件的代码:
actions.js
export const incrementQuantitySuccess = (basketProducts) =>{
return {
type: actionTypes.INCREMENT_QUANTITY_SUCCESS,
basketProducts:basketProducts
}
}
export const incrementQuantity = (line) => {
return (dispatch,getState) => {
/*LOGIC for increment quantity*/
const basketProducts = getState().basket.productsInBasket;
const updatedBasketProducts = basketProducts.map((product) =>{
if (product.id === line.id){
product.quantity += 1;
product.total = product.quantity * product.price;
}
return product;
});
/***************/
dispatch(incrementQuantitySuccess(updatedBasketProducts));
}
}
reducer.js
const incrementQuantitySuccess = ( state, action ) => {
return updateObject(state,{
productsInBasket:action.basketProducts,
loading:false
});
}
const reducer = (state= initialState,action) => {
switch(action.type){
case actionTypes.GET_BASKET: return getBasket(state,action);
case actionTypes.INCREMENT_QUANTITY_SUCCESS: return incrementQuantitySuccess(state,action);
default:return state;
}
}
export default reducer;
现在我已经将增量数量逻辑放在我的 action.js 文件中。
在分配业务逻辑时,我发现了各种关于在 reducer 和 action 创建者之间保持平衡的建议,其中有些人告诉我要让 reducer 变得愚蠢和愚蠢。
我的问题是增量逻辑应该去哪里?我在 redux.js.org 上浏览了几篇关于业务逻辑应该在哪里的文章,但我仍然不清楚。
还有这个特殊的用例,我不确定我是否需要像 redux-logic 这样的中间件。
我是新来的反应。请对此进行指导。
提前致谢
【问题讨论】:
-
问题中的代码特定于redux-thunk,但没有明确提及。是的,你可能会从 redux-logic 中受益。
-
你能通过修改上面的例子来解释一下吗?
-
基本上,
LOGIC for increment quantity应该转到transformRedux 逻辑以执行 INCREMENT_QUANTITY 操作(您甚至不需要单独的 INCREMENT_QUANTITY 和 INCREMENT_QUANTITY_SUCCESS 操作)。这是一件好事,它非常简单。如果您这样做会遇到特定问题,请考虑提出一个新问题。由于当前问题不包含 stackoverflow.com/help/mcve ,因此很难给出有用且可行的答案。 -
谢谢,但我想我会使用自定义中间件..
标签: javascript reactjs redux react-redux middleware