【发布时间】:2018-10-29 00:43:59
【问题描述】:
我已经与 React 和 Redux 合作了大约 3 年。
我还使用redux-thunk 处理异步内容。
我非常喜欢它们,但最近我注意到我的项目中几乎所有的鸭子都使用相同的动作结构、reducers、选择器等。
例如 - 您有一个应用程序,它有一些用户和交易(或类似)列表、项目详细信息和编辑功能。 所有这些列表或项目都有自己的鸭子(动作、reducers、选择器等)。
下面的代码会更清楚地显示问题:
// ACTIONS
const const setUser = user => ({
type: types.SET_USER,
payload: user,
});
const cleanUser = () => ({ type: types.CLEAN_USER });
const fetchUser = userId => dispatch =>
dispatch(fetchApi(userRequests.get(userId)))
.then(response => dispatch(setUser(response)))
.catch(error => showNotification(error));
// delete, update, etc... user actions
// REDUCER
const userReducer = (state = null, action) => {
switch (action.type) {
case types.SET_GROUP_ITEM:
return action.payload;
case types.CLEAN_GROUP_ITEM:
return null;
default:
return state;
}
};
上面的代码显示了来自users duck 的user 的结构,这对于其他鸭子来说几乎是一样的。
有什么方法可以减少重复代码? 感谢您的提前!
【问题讨论】:
-
我正准备用我的技巧来回答,但后来我意识到......在你的例子中我实际上没有看到任何重复。当然你有动作,reducers 等等,但那是结构,而不是重复;使用鸭子的重点是让您知道在哪里可以找到东西。我要说的是 redux 的部分想法是明确的,这往往会导致重复。
-
如果你在谈论样板,我发现当我开始使用
redux-actions时,我对 Redux 更满意。这提供了一个很好的概述:codeburst.io/redux-actions-through-example-part-1-f5b2dc71de06 -
@Odalrick,我想说鸭子只是名称不同,但每个实体的动作和减速器几乎相同。
标签: javascript reactjs redux redux-thunk