我正在通过做一个小项目来学习redux。一切正常,但我需要知道如何重构这样的代码。在这种情况下,像我所做的那样使用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;
}
};发布于 2016-11-23 07:22:07
如果需要,可以嵌套案例陈述:
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;
}或者为了可读性(特别是在很多情况下),将子case语句分解成单独的函数(这是向“复合减法器”的方向发展,其中状态是从多个减法器派生出来的,这在层次结构中也可以处于不同的级别)。
switch (action.type) {
case 'LOCALE_SELECTED':
return localeReducer(action);
break;
default:
return state;
}https://stackoverflow.com/questions/40758174
复制相似问题