2016-11-23 335 views
0

我通過做一個小型項目來學習REDX。一切工作正常,但我需要知道我可以重構這樣的代碼。對於這種情況,像我一樣使用if conditions可能會很好,但如果我需要處理7-8種語言,該怎麼辦?使用else if for 7 times將不可行。處理這種情況的正確方法是什麼?在這裏問這樣的問題是否正確?語言環境語言縮減器

import { FRENCH } from '../../public/messages/fr'; 
import { ENGLISH } from '../../public/messages/en'; 

const initialState = { 
    lang: FRENCH.lang, 
    messages: FRENCH.messages 
}; 
export const localeReducer = (state = initialState, action) => { 
    switch (action.type) { 
    case 'LOCALE_SELECTED': 
    if (action.locale === 'fr') { 
     return { ...initialState, lang: FRENCH.lang, messages: FRENCH.messages }; 
    } else if (action.locale === 'en') { 
     return { ...initialState, lang: ENGLISH.lang, messages: ENGLISH.messages }; 
    } break; 
    default: 
     return state; 
    } 
}; 

回答

1

可以嵌套你的case語句,如果你想:

switch (action.type) { 
    case 'LOCALE_SELECTED': 
     switch (action.locale) { 
     case 'fr': 
      return { ...initialState, lang: FRENCH.lang, messages: FRENCH.messages }; 
     default: 
      return { ...initialState, lang: ENGLISH.lang, messages: ENGLISH.messages }; 
     } 
     break; 

    default: 
     return state; 
} 

或可讀性(特別是在有很多情況下)打破子殼語句分成不同的功能(這是邁向移動「組成的減員',其狀態來自多個減員,這也可以在層級中的不同級別)。

switch (action.type) { 
    case 'LOCALE_SELECTED': 
    return localeReducer(action); 
     break; 

    default: 
     return state; 
} 
+0

在需要檢查更多條件的情況下,您更喜歡哪一種? – Serenity

+0

我更喜歡把事情分解(!);讀取更好,減速器可以專注於狀態的特定部分並且更容易測試。 –

+0

當然,如果案件數量相對較少,打破它可以是矯枉過正的。在梳理減速器建立國家的主題看看這個:http://redux.js.org/docs/api/combineReducers .html –