首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >语言环境减缩器

语言环境减缩器
EN

Stack Overflow用户
提问于 2016-11-23 07:14:09
回答 1查看 133关注 0票数 0

我正在通过做一个小项目来学习redux。一切正常,但我需要知道如何重构这样的代码。在这种情况下,像我所做的那样使用if conditions可能是件好事,但是如果我需要处理7-8种语言呢?使用else if for 7 times是不可行的。处理这种情况的适当方法是什么?在这里问这样的问题合适吗?

代码语言:javascript
复制
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;
  }
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-23 07:22:07

如果需要,可以嵌套案例陈述:

代码语言:javascript
复制
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语句分解成单独的函数(这是向“复合减法器”的方向发展,其中状态是从多个减法器派生出来的,这在层次结构中也可以处于不同的级别)。

代码语言:javascript
复制
switch (action.type) {
    case 'LOCALE_SELECTED':
     return localeReducer(action);
      break;

    default:
      return state; 
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40758174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档