Магазин ngrx не обновляет подписку при обновлении объекта - PullRequest
0 голосов
/ 31 января 2019

Теперь я понимаю, что есть похожие вопросы здесь и здесь но они дали мне только половину ответа,

По сути, то, что происходит в моем редуктореУ меня есть метод обновления, подобный так:

import * as UserActions from '../actions/user.actions';
import { UserDto } from '@shared/service-proxies/service-proxies';

export function userReducer(state: UserDto[] = null, action: 
UserActions.Actions) {
  switch (action.type) {
    case UserActions.SET_USERS:
        return action.payload;
    case UserActions.UPDATE_USER:
        if (state === null) { state = []; }
        let index = state.findIndex(x => x.id === action.payload.id);
        if (index !== -1) {
            state[index] = action.payload;
        } else {
            state.push(action.payload);
        }
        return state;
    default:
        return state;
  }
}

теперь происходит вызов обновления, меняющего состояние и возвращающего новое состояние, но не вызывающего мою подписку о состоянии, теперь из других вопросов, которые я могуЯ понимаю, это потому, что «технически» это один и тот же объект состояния, только с измененными определенными объектами. Как при таких обстоятельствах я могу активировать свою подписку?

Я попытался создать новую переменную, подобную этой, и затем вернуть ее, но он все еще думает, что это тот же объект

let newState = state;
return state

что было бы лучшим решением здесь ??

1 Ответ

0 голосов
/ 02 февраля 2019

Проблема в том, что вы говорите, что вы изменяете существующее состояние, а не создаете новое.Вы должны использовать оператор распространения для возврата новых объектов в большинстве случаев.

return { ...state, action.payload };
...