首页 > 其他 > 详细

[NGXS] Select - 3. @Selector orders matter

时间:2020-01-16 19:38:56      阅读:72      评论:0      收藏:0      [点我收藏+]

Problem:

// counter.state.ts
export interface CounterStateModel {
  counter: number;
}

@State<CounterStateModel>({
  name: counter,
  defaults: {
    counter: 0
  }
})
export class CounterState {}

// counter.query.ts
export class CounterQuery {
  @Selector([CounterQuery.getCounter])
  static getCounterCube(counter: number): number {
    return counter ** 3;
  }

  // Note: this selector being declared after its usage will cause an issue!!!
  @Selector([CounterState])
  static getCounter(state: CounterStateModel): number {
    return state.counter;
  }

  @Selector([CounterQuery.getCounter])
  static getCounterSquare(counter: number): number {
    return counter ** 2;
  }
}

 

Two ways to solve the problem:

1. Change the order:

export class CounterQuery {
  @Selector([CounterState])
  static getCounter(state: CounterStateModel): number {
    return state.counter;
  }

  @Selector([CounterQuery.getCounter])
  static getCounterCube(counter: number): number {
    return counter ** 3;
  }

  @Selector([CounterQuery.getCounter])
  static getCounterSquare(counter: number): number {
    return counter ** 2;
  }
}

 

2. Using createSelector:

export class CounterQuery {
  static getCounterCube() {
    return createSelector(
      [CounterQuery.getCounter()],
      (counter: number) => counter ** 3
    );
  }

  static getCounter() {
    return createSelector(
      [CounterState],
      (state: CounterStateModel) => state.counter
    );
  }

  static getCounterSquare() {
    return createSelector(
      [CounterQuery.getCounter()],
      (counter: number) => counter ** 2
    );
  }
}

 

[NGXS] Select - 3. @Selector orders matter

原文:https://www.cnblogs.com/Answer1215/p/12202730.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!