2017-06-11 37 views
0

所以我有我的行動安裝像更新我的商店。減少react-redux動作代碼,這是一個不好的解決方案嗎?

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

這是一個可行的解決方案來更新我的商店,或者我應該讓自己的行動更加具體,我不是真的很享受的代碼終極版添加到我的項目的數量。

+0

你不需要''break'後return'馬上。這應該會減少代碼量:) –

回答

1

一個終極版的行動的基本定義是{ 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'); 

您也可以使用動作/減速實用工具庫,提供方法來創建行動,並減速。我過去使用過redux-actions

這些都是我通過降低動作/減速的代碼量等小的優化。

注意 - 使用物體休息/傳播所需Babel的Object rest spread transform

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

感謝您的信息隊友我會使用此建議。 –

1

我認爲你的問題是問有一個UPDATE_USER動作可以返回任何領域,具有VS獨立UPDATE_USER_NAMEUPDATE_USER_EMAIL行動。是的,那是絕對沒問題 - 你絕對不定義不同的動作類型的表單中的每個字段。

你的行爲的命名和目的是給你 - 做你找到最適合您的作品,使你的代碼的維護,更容易理解。

我寫行動語義相關的一些想法在我的博客文章Idiomatic Redux: The Tao of Redux, Part 2 - Practice and Philosophy,你可能要通讀。

相關問題