2016-11-23 10 views
0

私は小さなプロジェクトをやってレフィックスを学んでいます。すべて正常に動作していますが、私はどのように私がそのようなコードをリファクタリングできるかを知る必要があります。このような状況では、私がやったようにif conditionsを使うと良いかもしれませんが、もし私が7-8言語を扱う必要があればどうしますか? else if for 7 timesを使用することはできません。そのような状況に対処する適切な方法は何ですか?ここでそのような質問をするのは適切な場所ですか?ロケール言語レデューサー

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文したい場合は、できる

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

状態が複数のレデューサーから得られ、階層内の異なるレベルにあることができる複合レデューサー)。

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 –

関連する問題