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'});