语言环境语言缩减器
问题描述:
我通过做一个小型项目来学习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;
}
在需要检查更多条件的情况下,您更喜欢哪一种? – Serenity
我更喜欢把事情分解(!);读取更好,减速器可以专注于状态的特定部分并且更容易测试。 –
当然,如果案件数量相对较少,打破它可以是矫枉过正的。在梳理减速器建立国家的主题看看这个:http://redux.js.org/docs/api/combineReducers .html –