ngXs lambda select 如何知道要查看哪个状态?

How do ngXs lambda selects know which state to look in?

根据NGXS文档,以下是所有有效代码:

import { Select } from '@ngxs/store';
import { ZooState, ZooStateModel } from './zoo.state';

@Component({ ... })
export class ZooComponent {
  // Reads the name of the state from the state class
  @Select(ZooState) animals$: Observable<string[]>;

  // Uses the pandas memoized selector to only return pandas
  @Select(ZooState.pandas) pandas$: Observable<string[]>;

  // Also accepts a function like our select method
  @Select(state => state.zoo.animals) animals$: Observable<string[]>;

  // Reads the name of the state from the parameter
  @Select() zoo$: Observable<ZooStateModel>;
}

我的问题专门针对第三个 @Select。装饰器 and/or 框架究竟如何知道 应该在 lambda 中使用哪个 状态?这里没有什么明显的说法“这个组件使用 ZooState 作为它的状态对象”,那么如何确定要查看的正确状态切片呢?

郑重声明,这个模式似乎工作得很好 - 我只是有点不知如何是好。

当使用带有引用目标状态的函数的 NGXS @Select 装饰器时,state arg 在这种情况下表示包含所有已注册状态的整个状态对象,其名称提供在 @State 装饰器内(例如:@State<ZooStateModel>({ name: 'zoo' })

例如,如果您有 3 个状态,定义为:zooappfoo,并在商店中注册,则 [=12] 的类型=] arg 将如下所示:

@Select((state: { zoo: ZooStateModel; app: AppStateModel; foo: FooStateModel }) => state.zoo.animals)
animals$: Observable<string[]>;