Reactjs 减少react redux操作代码,这是一个糟糕的解决方案吗?
因此,我有我的行动设置这样更新我的商店Reactjs 减少react redux操作代码,这是一个糟糕的解决方案吗?,reactjs,redux,react-redux,Reactjs,Redux,React Redux,因此,我有我的行动设置这样更新我的商店 export const updateUser = (data) => { return{ type: 'UPDATE_USER', payload: data }; }; const initialState = { email: null, name: null }; export default function(state = initialState, action) {
export const updateUser = (data) => {
return{
type: 'UPDATE_USER',
payload: data
};
};
const initialState = {
email: null,
name: null
};
export default function(state = initialState, action) {
switch(action.type) {
case 'UPDATE_USER':
return Object.assign({}, state, action.payload);
break;
default: return state;
}
}
updateUser({ email: 'new email', name: 'some guys name'});
这是更新我的存储的可行解决方案,还是应该让我的操作更加具体,我并不真正喜欢redux添加到我的项目中的代码量。redux操作的基本定义是
{type:'type',payload:'payload'}
,因此您的操作创建者很好
实际上,您可以创建如下操作创建者:
const actionsCreatorCreator = (type) => (payload) => ({
type,
payload
});
//and create many actions from it
export const updateUser = actionsCreatorCreator('UPDATE_USER');
export const addUser = actionsCreatorCreator('ADD_USER');
您还可以使用actions/Reducer实用程序库,该库提供了创建actions和Reducer的方法。我过去用过
这些是我为减少操作/减缩器代码量而采用的其他小优化
注意-使用物体静止/伸展需要巴别塔
我假设您的问题是关于有一个可以返回任何字段的
UPDATE\u USER
操作,而不是有单独的UPDATE\u USER\u NAME
和UPDATE\u USER\u EMAIL
操作。是的,这非常好-您绝对不必为表单中的每个字段定义单独的操作类型
行为的命名和意图取决于您-做您认为最适合您的情况的事情,并使您的代码易于维护和理解
我确实在我的博客文章中写了一些关于动作语义的相关想法,你可能想通读一遍。你不需要在
返回后立即中断。这应该会减少一点代码量:)谢谢你提供的信息,伙计,我将使用这个建议。
export const updateUser = (payload) => ({ // return the object without a return statement
type: 'UPDATE_USER',
payload // shorthand property name
});
const initialState = {
email: null,
name: null
};
export default function(state = initialState, { type, payload }) { // destructure the action
switch(type) {
case 'UPDATE_USER':
return { ...state, ...payload } // use object rest/spread instead of assign
}
return state; // return after the switch instead of default
}
updateUser({ email: 'new email', name: 'some guys name'});