首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NGXS @Select使用状态模型

NGXS @Select使用状态模型
EN

Stack Overflow用户
提问于 2018-05-01 09:13:03
回答 3查看 9.8K关注 0票数 4

在使用NGXS @Select装饰器时,访问状态模型上定义的属性的正确方式是什么。

例如,定义了以下状态:

代码语言:javascript
复制
export interface UserStateModel {
 firstname: string;
 lastname: string;
}

@State<UserStateModel>({
  name: 'user',
  defaults: {}
})
export class UserState {..}

在组件中,如果我想像这样选择用户状态:

代码语言:javascript
复制
..export class MyComponent {

  @Select(UserState) user$: Observable<UserState>;

   ngOnInit(){
     this.user$.subscribe(u => {
         //do something with user state
         console.log(u.firstname);
     });
   }   
}

我得到了typescript错误,因为UserState上不存在firstname属性(因为它是在相关模型类型上定义的)。如果我引用的是组件html模板中的属性,那么我没有任何问题。

有一个关于选择器用法的related discussion,但我只是想确认一下我对当前版本的期望(如果我这样做是正确的!)。

我正在使用"@ngxs/store": "^3.0.0-rc.2",

EN

Stack Overflow用户

发布于 2019-08-14 20:14:13

您对问题的评论是选择整个状态容器的正确方法。

另一种选择(在我看来是更好的解决方案)是将a root-state model to infer types in Selectors.与那些您可以只选择必要的状态属性并仍然具有类型安全性的属性一起使用。

我对当前发布的解决方案的看法如下:

  • Memoized选择器:为您想要选择的每个未修改的状态属性编写一个带记忆的选择器会产生大量开销。我还期望记忆选择器有一个小的性能缺陷,这可能也是为什么它不是整个状态的官方解决方案的原因:非常不方便,因为你很少需要整个状态(例如,在你的例子中,只选择你的UserState的名字)。大多数情况下,您会希望选择一个特定的状态属性,并将其绑定到视图中或订阅它。您将获得更少的开销和更清晰/更干净的代码。
票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50110208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档