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.