Преобразование обновления для большого объекта из spread в Object.assign()

#javascript

#javascript

Вопрос:

В настоящее время я использую оператор spread для обновления большого объекта, и он работает просто отлично, за исключением того, что кажется, что нужно вводить каждый раз, когда я хочу обновить объект

 setGlobal((state: any) => ({
         ...state,
         locationData: {
           ...state.locationData,
           Config: { ...state.locationData.Config, Enabled: true },
         },
      }));
    }
  }, [onlineResponse]);

 

и я хочу попробовать Object.assign(), но я не могу получить тот же результат, и мой линтер взрывается, говоря, что у меня не хватает ‘,’ и ‘:’

 setGlobal((state: any) => ({
        const state = Object.assign({}, state, {state.locationData.Config.Enabled : true })
      }));
    }
  }, [onlineResponse]);
 

Комментарии:

1. Я бы придерживался оператора spread, потому что он кажется более чистым. Чтобы избежать большого ввода, вы можете рассмотреть возможность извлечения кода в функцию (но внутри этой функции я бы сохранил оператор spread).

Ответ №1:

На мой взгляд, синтаксис оператора spread выглядит более чистым и читаемым, но если вы хотите добиться такой же функциональности, Object.assign то это будет похоже на:

 Object.assign({}, state, { locationData: { ...state.locationData, config: {...state.locationData.config, Enabled: true }} });