Entity Adapter поддерживает обновление коллекции с помощью вызова метода «updateOne».Однако, когда ключи обновленных значений не существуют, это приводит к тому, что конкретный объект не обновляется.См. Пример кода.
Однако, внутренне адаптер сущности использует Object.assign()
, что, в то время как приятно, не всегда то, что я хочу.Я хотел бы, чтобы он в основном заменил рассматриваемый объект.
Более того, если рассматриваемый объект имеет структуру A (см. Ниже).Затем произошла произвольная операция с базой данных и вернул обновленный JSON обратно во внешний интерфейс.Со временем редуктор получит эту информацию в виде.
const originalValue: MyClass = new MyClass('value 1', 'value 2');
const updatedValueFromServer: MyClass = new MyClass('updated');
Then internally to the entity adapter it looks like
const updateValue = Object.assign(originalValue, updatedValueFromServer);
// which would result in ...
// { key1: 'updated', key2: 'value 2' }
// while I would like
// { key1: 'updated' }
// Or
// { key1: 'updated', key2: null }
case ActionTypes.UPDATE_SUCCESS:
return collectionAdapter.updateOne({
changes: action.payload.alertSubscription,
id: action.payload.alertSubscription.uniqueID
}, {
...state,
isLoading: false,
error: null
});
export class MyClass {
constructor(public key1?: string, public key2?: string) { }
}
Я бы хотел, чтобы он просто заменил значение в коллекции, а не пытался плохо обновлять внутренневызов "Object.assign ()".В качестве альтернативы было бы полезно установить ключи в null для ключей.