Это первый раз, когда я вижу, как это происходит, я уже некоторое время запускаю приложение и не менял редуктор, поэтому не уверен, что не так. Я создаю новый объект состояния, используя распространение op. и затем присвоение значения, но с указанием ошибки в списке.
CallStack:
- Вы попытались установить ключ 'lastSeen' со значением ... для объекта, который должен быть неизменным и заморожен
- Стек ошибок - throwOnImmutableMutation (deepFreezeAndThrowOnMutationInDev.js: 64: 8)
- Номер строки моего файла показан ниже
Номер строки, на которую он указывает, является присвоением lastSeen.
const initial = {
...
};
const BleCommunicator = (state = initial, action) => {
let nextState = null;
switch (action.type) {
...
case c.DEVICE_DISCONNECTED:
nextState = {
...state
};
nextState[action.device.id].lastSeen = moment(); //<-- this is where it is erroring
delete nextState[action.device.id].rssi;
nextState.connectedDevices = _.remove(nextState.connectedDevices, action.device.id);
break;
...
return nextState;
}
РЕДАКТИРОВАТЬ: причина, по-видимому, в том, что я запускаю эпопею rx, которая обновляет значения. Они берут нормальный путь через действия / редуктор, но во время второго запуска эпопеи (по таймеру) не удается обновить значение. Есть ли что-то, что могло бы происходить под капотом, что могло бы заставить меня обновлять старое состояние?
EDIT2: это происходит только на Android. Вот ссылка на объект, который является состоянием для обновляемого элемента. https://gist.github.com/anwarhamr/4c3ebc8e2a3d5166c025fd1cf69a7e1c