1

This is use of my Selector:-

private loadTree() {

    this.loading = true;

    this.store.select(transitionListSelector).pipe().subscribe(data => {
      console.log(data);
      data.map(item => {
        console.log(item);
        this.treeItems.push({ label: item.name, leaf: false, ...item });
      })
      this.loading = false;

    });

  }

This is my selector:-

export const transitionListSelector = createSelector(
    topicModuleSelector,
    (s) => s.transitionListState.transition
);

This is my reducer:-

export const transitionListReducer = createReducer(
    initialTopicModuleState.transitionListState,
    on(actions.listTransitionAction, (s) => {
        return { ...s, transition: [] };
    }),
    on(actions.listTransitionSuccessAction, (s, { transition }) => {
        return { ...s, transition };
    })
);

export function transitionListReducerMap(s: any, a: Action): any {
    return transitionListReducer(s, a);
}

This is my TopicModuleState :-

export interface TopicModuleState {
        
     transitionListState: TransitionListState;
    
    } 
export interface TransitionListState {
    transition: Transition[];
}

export const initialTopicModuleState: TopicModuleState = {
    
    transitionListState: {
        transition: []
    }
};

enter image description here

As You see in console I am getting 2 result first one is empty array and second is actual result. I want only Actual result.

Benezir
  • 113
  • 1
  • 9

1 Answers1

0

When the store is initialized, your selectors get initial values. If you skip the initial value, you can use the skip operator.

this.store.select(transitionListSelector).pipe(skip(1))

And, I think you shouldn't set an empty array when your listTransitionAction is dispatched. Create listTransitionActionFail action and use this action to set an empty array. Then move your loading state to ngrx state.

Emre HIZLI
  • 513
  • 6
  • 14