Если разные редукторы связаны с одним и тем же действием и выполняют изменения в хранилище, получают ли они одну и ту же версию, прежде чем произойдет какое-либо редактирование? Есть ли приоритет для рассмотрения?
Пример:
Предположим, что вы отправили действие Update
для редактирования объекта на стороне сервера, после успешного обновления данных эффект отправит действие Update_Success
с экземпляром недавно полученной версии объекта в качестве полезной нагрузки. Первый классический и логический редуктор будет использовать его для обновления магазина:
case ItemActionTypes.UPDATE_ITEM_SUCCESS: {
const item = action.payload;
return {
...adapter.upsertOne(item, state),
loaded: true,
loading: false
};
}
Теперь давайте предположим, что в другом файле у вас есть другой редуктор, связанный с тем же действием, и вам нужно сравнить вновь полученный объект со старым в хранилище:
case ItemActionTypes.UPDATE_ITEM_SUCCESS: {
const item = action.payload;
const oldItem = state.entities[item.id];
const changes = getAffectedProperties(item, oldItem);
// ...
}
Вопрос в следующем: Есть ли вероятность, что oldItem
фактически удерживает вновь полученный предмет вместо старого, поскольку первый редуктор, возможно, уже обновил его? Это дело «первым пришел, первым обслужен» ? или в его реализации есть что-то, что гарантирует, что все редукторы вносят изменения в одну и ту же версию хранилища и, возможно, объединяют эти изменения на следующем этапе?