首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何通过@ngrx/store获取State对象的当前值?

在使用@ngrx/store时,State对象的当前值可以通过Store类的select方法获取。以下是获取State对象当前值的步骤:

基础概念

@ngrx/store是Angular应用程序的状态管理库,基于Redux设计模式。它通过actions、reducers和selectors来管理应用程序的状态。

获取State对象的当前值

  1. 定义Reducer:首先,你需要定义一个reducer函数,该函数接收当前状态和一个action,并返回新的状态。
代码语言:txt
复制
import { createReducer, on } from '@ngrx/store';
import { increment, decrement } from './counter.actions';

export const initialState = { count: 0 };

const _counterReducer = createReducer(
  initialState,
  on(increment, state => ({ count: state.count + 1 })),
  on(decrement, state => ({ count: state.count - 1 }))
);

export function counterReducer(state, action) {
  return _counterReducer(state, action);
}
  1. 注册Reducer:在Angular模块中注册reducer。
代码语言:txt
复制
import { NgModule } from '@angular/core';
import { StoreModule } from '@ngrx/store';
import { counterReducer } from './counter.reducer';

@NgModule({
  imports: [
    StoreModule.forRoot({ counter: counterReducer })
  ]
})
export class AppModule { }
  1. 获取State对象的当前值:在组件中使用Store的select方法获取State对象的当前值。
代码语言:txt
复制
import { Component } from '@angular/core';
import { Store } from '@ngrx/store';
import { selectCounterState } from './counter.selectors';

@Component({
  selector: 'app-counter',
  template: `
    <div>Count: {{ count$ | async }}</div>
    <button (click)="increment()">Increment</button>
    <button (click)="decrement()">Decrement</button>
  `
})
export class CounterComponent {
  count$ = this.store.select(selectCounterState);

  constructor(private store: Store) {}

  increment() {
    this.store.dispatch(increment());
  }

  decrement() {
    this.store.dispatch(decrement());
  }
}
  1. 定义Selector(可选):为了更好地组织代码,可以将获取状态的逻辑放在selector中。
代码语言:txt
复制
import { createSelector } from '@ngrx/store';
import { AppState } from './app.state';

export const selectCounterState = (state: AppState) => state.counter;

应用场景

这种状态管理方式适用于大型Angular应用程序,特别是当应用程序的状态变得复杂时。通过@ngrx/store,你可以将状态管理逻辑与组件逻辑分离,使代码更易于维护和测试。

参考链接

通过以上步骤,你可以轻松地获取和使用@ngrx/store中的State对象的当前值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 一个Angular 5教程:一步一步指导实现你的第一个Angular 5应用程序

    因此,我们只需编写简单的代码即可获取我们的价值,并将其绑定到代码中的输入值和变量。...Angular为我们提供的另一种语法糖,与我们讨论过的同样的事情 - 订阅Observable并通过评估我们的表达式返回其当前值。...但并非完全 - 每一个国家都是不变的,但是Store,这是我们访问的方式State,实际上是一个国家的可观察。因此,State价值流中的一个值是单一的Store。...两者都是不可变的,但第二个是基于第一个的,所以State我们创建一个新的State对象,而不是在我们的变异值上。...我们可以使用诸如ngrx-store-localstorage之类的东西来存储我们的数据到浏览器的localStore,但是如何使用API​​呢?

    42.7K10

    react-redux 开发实践与学习分享

    开讲react-rudex 最初看文档的时候,有一种体验,就是各个模块(action,reducer,store)等等,都看明白了,但是具体想去完成功能的时候还是一脸懵逼,不知道如何下手,于是这次为了去更好的讲解示例...关联rudex和页面组件-connect 从之前主页面的代码可以看到,错误信息的显示是由组件的props传进来的,而主页面是如何获取相关的props的呢,答案是通过一个connect的函数。...mapStateToProps(state, ownProps) 第一个参数是获取redux仓库中的值的一个函数。...为了方便快速理解,我们可以简单粗暴的认为他是js中getter,setter中的getter,这是一个用来从redux中获取值的函数,这个函数返回的值,可以在当前组件的props中拿到。...中储存值的大对象,而现在需要的错误信息就是存储在tipMsg的字段当中。

    90530

    父类和子类对象的获取值的方式验证,通过父类属性的方式获取不到值,需要使用get方法

    父类和子类对象的获取值的方式验证,通过父类属性的方式获取不到值,需要使用get方法 静态属性通过类.属性的方式获取,对象获取使用get方法获取 package com.example.core.mydemo.java...String channelName) { this.channelName = channelName; } /** * partnerName: //通过父类属性的方式获取不到值...,需要使用get方法 * channelName: //通过父类属性的方式获取不到值,需要使用get方法 * partnerName2:合作商名称 * channelName2...* channelName3:渠道商名称 //对象自身的属性值可以获取 * partnerName4:合作商名称 * channelName4:渠道商名称...* MAX=100 静态属性通过类.属性的方式获取,对象获取使用get方法获取 * @param args */ public static void main(String

    9910

    经验分享 | 如何通过SQL获取MySQL对象的DDL、统计信息、查询的执行计划

    获取对象定义的SQL语句 获取表和视图的列表 select table_name, table_type from information_schema.tables where table_schema...DDL语句 对于MySQL数据库,索引信息可以从建表语句中获取,无需单独获取。...1.3 获取视图的DDL语句 查询语句 SHOW CREATE TABLE tpch.customer_v 查询结果 create view `customer_v` as select `customer...获取对象统计信息的SQL语句 2.1 表级统计信息 查询语句 select table_schema, table_name, table_type, engine, table_rows from information_schema.tables...PawSQL Engine, 是PawSQL系列产品的后端优化引擎,可以以docker镜像的方式独立安装部署,并通过http/json的接口提供SQL优化服务。

    15810

    给2019前端开发的你5个进阶建议~

    庆幸的是除了 React 社区,Vue 社区有类似的 Vuex,Angular 社区有 NgRx 也提供了几乎同样的能力,甚至 NgRx 还可以无缝使用 redux-devtools 来调试状态变化。...无论如何优化,始终要遵循 Redux 三原则: 原则 方法 引发的问题 Single source of truth 组件 Stateless,数据来源于 Store 如何组织 Store?...State is read-only 只能通过触发 action 来改变 State action 数量膨胀,大量样板代码 Changes are made with pure functions Reducer...是纯函数 副作用如何处理,大量样板代码 这三个问题我们是通过自研 iron-redux 库来解决,以下是背后的思考: 如何组织 Action?.../SUCCESS/ERROR 这 3 个action,我们通过 FetchTypes 类型来自动生成对应到 3 个 action 如何组织 Store/Reducer?

    1K10

    【初学者笔记】一文学会使用Vuex

    如何使用getters getters中的方法有两个默认参数 state 当前VueX对象中的状态对象 getters 当前getters对象,用于将getters下的其他getter拿来用 //state.js...return "年龄:" + state.age +";"+ getters.realName } }; 如何访问getters 通过属性访问 getter 会暴露为 store.getters 对象...如何使用mutation mutations方法都有默认的形参:mutation([state] [,payload]) state 当前VueX对象中的state payload 载荷(该方法在被调用时传递的参数...的值,顺便提一下如何增删state中的成员 Vue.set 为某个对象设置成员的值,若不存在则新增 Vue.set(state,"age",22) Vue.delete 删除成员 Vue.delete(...(state.name) console.log(rootState .name) } }; 如何在模块化中进行开发 1. state 获取 这个要在原来状态名前面加一个模块名才能取到到模块内的对象

    4.7K30

    vuex源码解读

    如何区分state是外部直接修改,还是通过mutation方法修改的? 调试时的“时空穿梭”功能是如何实现的? 解惑 vuex核心功能如下 Vue Components:Vue组件。...因此在Vue Component任意地方都能够通过this.$store访问到该store。 问:state内部支持模块配置和模块嵌套,如何实现的?...在执行如dispatch('submitOrder', payload)的时候,actions中type为submitOrder的所有处理方法都是被封装后的,其第一个参数为当前的store对象,所以能够获取到...问:Vuex如何区分state是外部直接修改,还是通过mutation方法修改的?...因为dev模式下所有的state change都会被记录下来,'时空穿梭' 功能其实就是将当前的state替换为记录中某个时刻的state状态,利用 store.replaceState(targetState

    55030

    Vuex框架原理与源码分析

    如何区分state是外部直接修改,还是通过mutation方法修改的? 调试时的“时空穿梭”功能是如何实现的?...Vue组件接收交互行为,调用dispatch方法触发action相关处理,若页面状态需要改变,则调用commit方法提交mutation修改state,通过getters获取到state新值,重新渲染Vue...因此在Vue Component任意地方都能够通过this.$store访问到该store。 2. 问:state内部支持模块配置和模块嵌套,如何实现的?...在执行如dispatch('submitOrder', payload)的时候,actions中type为submitOrder的所有处理方法都是被封装后的,其第一个参数为当前的store对象,所以能够获取到...问:Vuex如何区分state是外部直接修改,还是通过mutation方法修改的?

    3.1K40

    React和Redux——状态管理Flux和Redux

    3、数据改变只能通过纯函数来完成 这里所说的纯函数值得就是Reducer,规约函数Reducer接收两个参数分别是当前的状态和接收到的动作action对象。...Reducer根据当前的State和动作类型Action产生一个新的State对象返回。...类似于Flux中的回调函数,不同的是在Reducer中多了一个传入参数State表示当前状态,Reducer返回一个更新后的State状态对象。...() { store.unsubscribe(回调函数); } } 每次Store更新时都会触发View获取最新的状态值,因此我们将获取Store中最新的状态信息抽出一个单独的函数...使用Store的subscribe和unsubscribe方法在组件挂载和取消挂载时绑定和解绑回调函数,回调函数将会重新获取Store中最新的状态值并且使用this.setState修改组件内部的状态值触发组件渲染

    1.9K80

    浅析Vuex及相关面试题答案

    在当前前端的spa模块化项目中不可避免的是某些变量需要在全局范围内引用,此时父子组件的传值,子父组件间的传值,兄弟组件间的传值成了我们需要解决的问题。...抛出问题 使用Vuex只需执行 Vue.use(Vuex),并在Vue的配置中传入一个store对象的示例,store是如何实现注入的?state内部是如何实现支持模块配置和模块嵌套的?...如何区分state是外部直接修改,还是通过mutation方法修改的?调试时的“时空穿梭”功能是如何实现的? vue和vuex的区别与联系 ?...$store.commit("increment") } }, //通过getter中的方法来获取state值 getters: {...三、它通过mapState把全局的 state 和 getters 映射到当前组件的 computed 计算属性中 3、vuex的Getter特性是?

    1.1K30

    Vuex 3.x 状态管理模式

    Vue 2 使用 Vuex 3,本文记录的是 Vuex3 的使用总结,Vuex 3.x 文档 一、组件之间共享数据的方式: 父向子传值: v-bind 属性绑定,子向父传值: v-on 事件绑定 二、那么页面之间如何共享数据呢...导入 store 对象 export default store 在 main.js 中导入 store 对象,并将 store 对象挂载到 vue 实例上 import store from '....name: "zhang", age: 30 }, ], }, getters: { more20Stu(state) { // 获取年龄大于20的 return state.students.filter...$store.commit("decrement", num);//传参 通过 commit 进行提交是一种普通的提交方式,vue 还提供了另外一种风格,它是一个包含 type 属性的对象 this....$store.commit({ type: "add", num: 10, age: 20, }); 此时要注意 mutation 中的方法的第二个参数的值,和普通提交方式可不一样 add(state,

    1.5K20
    领券