这个问题可能有重复,但他们并没有很好地回答我的问题。所以我决定开始一个新线程。
所以我正在尝试为电子商务应用程序创建一个简单的购物篮组件....
以下是 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 creator 之间保持平衡的建议,有些人告诉我要让 reducer 保持愚蠢和愚蠢。
我的问题是增量逻辑应该放在哪里?我在 redux.js.org 上浏览了几篇关于业务逻辑应该在哪里的文章,但我仍然不清楚。
还有这个特殊的用例,我不确定我是否需要像 redux-logic 这样的中间件。
我是新手。请对此进行指导。
提前致谢
最佳答案
其中一种做法是,您应该保持 reducer 和操作纯净,真正的副作用应该发生在您的中间件内部。通过这种方法,您将保持 Action 和缩减器良好和干净,并且您可以完全专注于您的中间件,因为它们将成为唯一可能发生副作用的地方。
当我观看 Nir Kaufman 的演讲时,我真的很惊讶,我鼓励您观看他在 ReactNYC 上的演讲 Advanced Redux Patterns - Nir Kaufman @ ReactNYC .当我在 Redux 上苦苦挣扎时,这个视频对我帮助很大。
另外还有来自 Nir 的关于 Redux 和中间件的第二次演讲。你可以在这里查看第二个 Advanced Redux: Design Patterns and Practices - Nir Kaufman | JSHeroes 2018
希望对您有所帮助!
关于javascript - 在使用 redux 使用react时,业务逻辑应该去哪里(action creators 或 reducers)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53571233/