ngrx Как подписаться на действие в компоненте или подписаться на состояние - PullRequest
0 голосов
/ 03 октября 2018

Я помещаю объект в состояние по действию через эффект:

{
 field1: 'value1',
 field2: 'value2',
}

, но затем добавляю новое поле (через эффекты, после ответа сервера) и избыточность выглядит так:

{
 field1: 'value1',
 field2: 'value2',
 newField: 'this is new field'
}

В компоненте мне нужно получить только последнее, последнее состояние.Как я могу это сделать ???Подпишитесь, чтобы хранить и получать информацию о состоянии, когда «newField» уже на месте.

@Effect()
  initializeMain$: Observable<Action> = this.actions$.pipe(
    ofAction(AppInitializeAction),
    map(action => {
      const obj = {
		 field1: 'value1',
		 field2: 'value2',
	  }
      return new InitializeObjAction(obj);
    }),
  );

  @Effect()
  addNewFieldToState$: Observable<Action> = this.actions$.pipe(
    ofAction(InitializeObjAction),
    map(action => {
      const newField = {
		 newField: 'This is new field'
	  }
      return new addNewFieldAction(newField);
    }),
  );

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

   @Action(InitializeObjAction)
	initialize(state: IAppState, action: InitializeObjAction) {
    return { ...state, mainState: action.payload };
   }
   @Action(addNewFieldAction)
	addNewField(state: IAppState, action: addNewFieldAction) {
    return {
      ...state,
      mainState: {
        ...state.mainState,
        newField: action.payload
      }
    };

В компоненте мне нужно:

this.store.select(storeStateWithNewField).subscribe.....

1 Ответ

0 голосов
/ 03 октября 2018

Вы можете использовать фильтр RxJS * Оператор :

this.store.select(storeStateWithNewField)
.pipe(filter(_ => _.newField !== undefined))
.subscribe...;
...