Javascript ngrx中的store.select是什么

Javascript ngrx中的store.select是什么,javascript,angular,redux,ngrx,Javascript,Angular,Redux,Ngrx,我是Redux新手,从ngrx开始。我无法理解这行代码存储的含义。请选择: clock: Observable<Date>; this.clock = store.select('clock'); 时钟:可观测; this.clock=store.select('clock'); 哇,这是一个大话题。所以基本上,“select”实际上是一个RXJS操作符,在本例中用于检索应用程序状态对象的一部分的值。因此,假设您的主应用程序状态有一组用户和一组安全功能。“Select”允许您获

我是Redux新手,从ngrx开始。我无法理解这行代码
存储的含义。请选择

 clock: Observable<Date>;
 this.clock = store.select('clock');
时钟:可观测;
this.clock=store.select('clock');

哇,这是一个大话题。所以基本上,“select”实际上是一个RXJS操作符,在本例中用于检索应用程序状态对象的一部分的值。因此,假设您的主应用程序状态有一组用户和一组安全功能。“Select”允许您获取对一个可观察对象的引用,该对象的值就是该用户数组。在你进入ngrx之前,你真的需要研究观测值和RXJ。我发现这篇文章在Github项目主页上的链接对ngrx很有帮助

RXJS和redux可能是一个大话题,但我建议您将您的知识分成小块。我花了大约两个月的时间才真正开始感到舒服。即使您不继续使用ngrx,了解RXJS的工作原理也是非常有用的,值得花时间学习

这里有一篇要点文章,也很好地介绍了RXJS。

它返回称为“时钟”的状态

这里有一个例子。调用构造函数store.select,这次使用“todos”

APP_减速器是定义的所有减速器。todos减速器的定义如下:

    import {ActionReducer, Action} from "@ngrx/store";
import {Todo} from "../common/interfaces";
import {ADD_TODO, REMOVE_TODO, TOGGLE_TODO} from "../common/actions";

export const todos : ActionReducer<Todo[]> = (state : Todo[] = [], action: Action) => {
  switch(action.type) {
      case ADD_TODO:
          return [
              ...state,
              action.payload
          ];
从“@ngrx/store”导入{ActionReducer,Action}”;
从“./common/interfaces”导入{Todo};
从“./common/actions”导入{ADD_-TODO,REMOVE_-TODO,TOGGLE_-TODO};
导出常量Todo:ActionReducer=(状态:Todo[]=[],操作:操作)=>{
开关(动作类型){
案例添加待办事项:
返回[
……国家,
行动.有效载荷
];
有几种方法可以做到这一点,您可以组成一个所有减速器的列表,基本上定义一系列引用减速器对象的对象键


Store.select返回一个可观察对象,您可以通过“异步”在组件或模板中订阅该对象。

用非常简单的术语来说,select将应用程序状态中的一部分数据打包成可观察对象

它的意思是,select操作符获取您需要的数据块,然后将其转换为可观察对象。因此,您返回的是一个可观察对象,它包装了所需的数据。要使用数据,您需要订阅它

让我们看一个非常基本的例子

  • 让我们来定义我们商店的模型

    export interface AppStore {
       clock: Date
    }
    
  • 从“@ngrx/Store”将存储导入组件

  • 通过注入构造函数来创建存储

    constructor(private _store: Store<AppStore>){}
    
  • This.store.select('keyname')将从'keyname'属性的store对象返回数据。您可以使用带有StoreModule.forFeature的多个reducer在带有createSelector的主模块中进一步查找存储中的内部对象

    export const getMasterState = createFeatureSelector<myModels.MasterState>('master');
    export const getMatserBranchList = createSelector(
        getMasterState,
        (state: myModels.MasterState): myModels.Branch[] => state.branchList
    );
    
    export const getMasterState=createFeatureSelector('master');
    导出常量getMatserBranchList=createSelector(
    getMasterState,
    (状态:myModels.MasterState):myModels.Branch[]=>state.branchList
    );
    
    你能告诉我你是如何花了2个月的时间才适应的吗,我的意思是每个开发人员都需要这样的时间,你是新的bie吗,顺便说一句,回答得很好。我也对select很感兴趣,它就像地图操作符,接受函数和转换值,对吗?我有一个项目我正在进行,我们正在转换为Angular 2,并决定试一试ngrx。我是新手对于ngrx和rxjs。我想说我花了比ngrx更多的时间学习rxjs的概念和可观测的工作原理。对于我来说,ngrx花时间掌握的大部分内容是设置减缩器和流逻辑的最佳约定。如何设置动作创建者。我从示例应用程序链接中获得了大量灵感离开ngrx商店项目自述。能够理解示例应用程序中发生的事情花了一点时间。我还得到了一个书呆子订阅,并观看了由创建者丹·阿布里莫夫制作的redux视频。阅读了一些关于redux项目问题的流行问题。我做了大约15年的程序员,但我只接触过reduxJavaScript方面在过去的5年里才开始学习框架,在过去的2到3年里才开始学习框架。我对框架的了解有点晚了。开始简单的解释吧。我尝试了这个,我得到了一个可观察的,如果我打印它,我会得到>Store{u isScalar:false,actionsObserver:ActionsObject,reducerManager:reducerManager,源代码:Store,运算符:DistinctUntilChangedOperator}我的数据似乎就在那个可观测数据的某个地方,我如何从中获取它呢?你需要订阅一个可观测数据,然后你将获得所需的数据。Kloop4:如果你不知道什么是可观测数据,你需要查看RxJs。请参考这里的官方页面@Koop4,你需要使用异步管道
    constructor(private _store: Store<AppStore>){}
    
    public clock: Observable<Date>;
    
    this.clock = this._store.select('clock');
    
    export const getMasterState = createFeatureSelector<myModels.MasterState>('master');
    export const getMatserBranchList = createSelector(
        getMasterState,
        (state: myModels.MasterState): myModels.Branch[] => state.branchList
    );