NgRx - уменьшает приоритет и порядок выполнения по отношению к хранилищу - PullRequest
0 голосов
/ 01 июля 2018

Если разные редукторы связаны с одним и тем же действием и выполняют изменения в хранилище, получают ли они одну и ту же версию, прежде чем произойдет какое-либо редактирование? Есть ли приоритет для рассмотрения?

Пример:

Предположим, что вы отправили действие 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 фактически удерживает вновь полученный предмет вместо старого, поскольку первый редуктор, возможно, уже обновил его? Это дело «первым пришел, первым обслужен» ? или в его реализации есть что-то, что гарантирует, что все редукторы вносят изменения в одну и ту же версию хранилища и, возможно, объединяют эти изменения на следующем этапе?

1 Ответ

0 голосов
/ 08 июля 2018

Если разные редукторы связаны с одним и тем же действием и внося изменения в магазин, они получают ту же версию об этом, прежде чем произойдет какое-либо редактирование? Есть ли приоритет для рассмотрения?

Редукторы имеют доступ только к своему состоянию. Так что вы не должны заботиться об этом.

Кроме того, когда отправляется одно действие, все редукторы вызываются синхронно. Это означает, что если для ACTION_A вы изменяете свой магазин из разных мест (/ разных редукторов), ваши селекторы (или даже представление) будут обновляться только один раз. Когда все обновления для этого действия будут применены в магазине.

...