Как правильно отправлять и получать данные из магазина ngrx

Я пытаюсь работать с магазином ngrx и столкнулся с проблемой, чтобы правильно отправить данные в свой магазин и выбрать их.

Мой объект магазина выглядит так

AppStore = {
  chat: {
    messages: []
  }
}

и мои редукторы выглядят как

const initialState = {
  messages: []
};

export const ChatReduce = (state = initialState, action:Action) => {
  if (typeof state === 'undefined') {
    return initialState;
  }
  switch(action.type){
    case 'ADD_MESSAGE':
      return {
        ...state,
        messages: [...state.messages, action.payload]
      };
    default:
      return state;
  }
};

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

А после записи в хранилище, как выбрать сообщения о моем состоянии? Обязательно ли подписываться на данные? Я пробовал this.store.select('chat'), но как получать сообщения?


person David    schedule 14.05.2017    source источник


Ответы (2)


Вот как я подошел к этому,

  ngOnInit() {
  this.getStudents();
  this.students$ = this.store.select(state => state.students)
  this.students$.forEach( v => console.log(v))
  }

  getStudents(){
  // we want to dispatch na action 
  this.store.dispatch(new studentActions.LoadStudentsAction())
}
person Phaseka Malatji    schedule 09.02.2018

Мне удалось добавить его без переопределения:

https://jsfiddle.net/seesyong/stL5o0ck/

Если вы хотите вытащить только сообщения, вы можете:

this.store.select(state => state.chat)
  .subscribe(chat => {
  console.log(chat.messages);
});
person seescode    schedule 28.06.2017