2017-11-17 11 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에 대해 비슷한 객체를 가지고있다. 어떻게 그것을 막아야 하는가? 또는 tghrought 객체를 매핑하고 필드를 변경하는 것은 (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, 
    }, 
}; 

은 물론 또한 피 복제의 기본 접근 방식이있다 : (아마도 다른 작은 세부 사항에 대한 매개 변수) 함수에 반복되는 코드를 삽입하고, 여러 위치에서 해당 전화.