[英]How to simplify with spread syntax es6
如何簡化代碼,我嘗試生成對象並為每個change方法調用,並取決於arguments(newValues)我更改了某些字段,似乎我有重復的代碼,如何避免這種情況? 我應該使用一些更困難的方法來避免使用擴展語法嗎
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]))
}}
您可以將重復的部分放在一個額外的對象文字中,就像您已經對configurationsMi
所做的一樣,然后引用它。
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,
},
};
當然,還有避免重復的默認方法:將重復的代碼放在一個函數中(可能帶有參數以表示不同的細節),然后從多個位置進行調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.