语言环境语言缩减器

问题描述:

我通过做一个小型项目来学习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; 
    } 
}; 

可以嵌套你的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 –