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 个状态,定义为:zoo
、app
和 foo
,并在商店中注册,则 [=12] 的类型=] arg 将如下所示:
@Select((state: { zoo: ZooStateModel; app: AppStateModel; foo: FooStateModel }) => state.zoo.animals)
animals$: Observable<string[]>;
根据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 个状态,定义为:zoo
、app
和 foo
,并在商店中注册,则 [=12] 的类型=] arg 将如下所示:
@Select((state: { zoo: ZooStateModel; app: AppStateModel; foo: FooStateModel }) => state.zoo.animals)
animals$: Observable<string[]>;