2017-11-17 3 views
0

コードを単純化するには、オブジェクトを生成して各変更メソッドを呼び出そうとしましたが、引数(newValues)に依存します。フィールドを変更しました。この場合?すでにconfigurationsMiで行ったように - - それを参照してください、私はあなただけのリテラル余分なオブジェクトで繰り返しセクションを置くことができ、拡散演算子でスプレッドシンタックスを使って簡単にする方法es6

const formName = { 
    fieldRange: 'miConfiguration.fieldRange', 
    defaultTimeout: 'miConfiguration.doorConfiguration.defaultTimeout', 
    standAlone: 'miConfiguration.doorConfiguration.standAlone', 
    overrideTimeout: 'miConfiguration.doorConfiguration.overrideTimeout', 
    inputMode: 'miConfiguration.doorConfiguration.inputMode', 
    stopMi: 'miConfiguration.doorConfiguration.stopMi', 
    activeLow: 'miConfiguration.doorConfiguration.activeLow', 
    enableDualTechnology: 'miConfiguration.enableDualTechnology', 
    passageName: 'miConfiguration.passageName', 
} 

let {fieldRange, defaultTimeout, standAlone, overrideTimeout, inputMode, stopMi, activeLow, enableDualTechnology, passageName} = formName 

let configurationsMi = { 
    [passageName]: null, 

    [fieldRange]: null, 
    [activeLow]: false, 
    [standAlone]: null, 
    [defaultTimeout]: null, 
    [overrideTimeout]: null, 
    [inputMode]: null, 
    [stopMi]: null, 
    [enableDualTechnology]: false, 
} 

const defaultValues = { 
    [MiConfigurationTypes.AccessPointOnly]: { 
     ...configurationsMi, 
     [fieldRange]: MiFieldRanges.Disabled, 
    }, 

    [MiConfigurationTypes.WanderingDetection]: { 
     ...configurationsMi, 
     [fieldRange]: MiFieldRanges.Small, 
    }, 
    [MiConfigurationTypes.MuteWanderingDetection]: { 
     ...configurationsMi, 
     [fieldRange]: MiFieldRanges.Small, 
    }, 
    [MiConfigurationTypes.LockedWanderingControl]: { 
     ...configurationsMi, 
     [fieldRange]: MiFieldRanges.Small, 
     [standAlone]: DoorStates.Locked, 
     [defaultTimeout]: '00:00:03', 
     [overrideTimeout]: '00:00:30', 
     [inputMode]: InputModes.NotUsed, 
     [stopMi]: false, 
    }, 
    [MiConfigurationTypes.OpenWanderingControl]: { 
     ...configurationsMi, 
     [fieldRange]: MiFieldRanges.Small, 
     [standAlone]: DoorStates.Locked, 
     [defaultTimeout]: '00:00:03', 
     [overrideTimeout]: '00:00:30', 
     [inputMode]: InputModes.NotUsed, 
     [stopMi]: false, 
    }, 
} 

onChange={(e, newValue) => { 
       console.log(defaultValues) 
       Object.keys(defaultValues[newValue]).forEach(key => change(key, defaultValues[newValue][key])) 
      }} 
+0

回避したい重複コードはどこにありますか? 'LockedWanderingControl' /' OpenWanderingControl'を意味しますか? – Bergi

+0

私はLockedWanderingControl/OpenWanderingControlの類似のオブジェクトを持っています それを避ける方法。または、オブジェクトをマップしてフィールドを変更するだけです(newValues(MiConfigurationTypes.OpenWanderingControl、... etc)) –

答えて

1

を避けるために、いくつかのより多くの困難な方法を使用する必要があります。もちろん

const configurationsWanderingControl = { 
    [fieldRange]: MiFieldRanges.Small, 
    [standAlone]: DoorStates.Locked, 
    [defaultTimeout]: '00:00:03', 
    [overrideTimeout]: '00:00:30', 
    [inputMode]: InputModes.NotUsed, 
    [stopMi]: false, 
}; 
const defaultValues = { 
    … 
    [MiConfigurationTypes.LockedWanderingControl]: { 
     ...configurationsMi, 
     ...configurationsWanderingControl, 
    }, 
    [MiConfigurationTypes.OpenWanderingControl]: { 
     ...configurationsMi, 
     ...configurationsWanderingControl, 
    }, 
}; 

デフォルトのアプローチは、重複を避けるにもあります。(おそらく異なるほとんどの詳細のパラメータを持つ)を関数内で繰り返しコードを配置し、複数の場所からそれを呼び出します。

関連する問題