ngrx/store 开源项目教程
2024-08-22 02:29:38作者:霍妲思
项目介绍
ngrx/store 是一个基于 RxJS 的状态管理库,专为 Angular 应用程序设计。它遵循 Redux 的设计原则,通过单一数据源和不可变状态来管理应用程序的状态。ngrx/store 提供了一种可预测的方式来处理状态变化,使得状态管理更加清晰和可维护。
项目快速启动
安装
首先,确保你已经安装了 Angular CLI。然后,通过以下命令安装 ngrx/store:
npm install @ngrx/store --save
配置
在你的 Angular 项目中,打开 app.module.ts
文件,并添加 StoreModule
到 imports
数组中:
import { StoreModule } from '@ngrx/store';
import { reducers } from './reducers';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
StoreModule.forRoot(reducers)
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
创建 Reducer
创建一个名为 reducers
的文件夹,并在其中创建一个 index.ts
文件,定义你的 reducer:
import { ActionReducerMap } from '@ngrx/store';
import { AppState } from '../app.state';
import { counterReducer } from './counter.reducer';
export const reducers: ActionReducerMap<AppState> = {
counter: counterReducer
};
创建 Action
在 actions
文件夹中创建一个 counter.actions.ts
文件,定义你的 action:
import { createAction } from '@ngrx/store';
export const increment = createAction('[Counter] Increment');
export const decrement = createAction('[Counter] Decrement');
export const reset = createAction('[Counter] Reset');
创建 Reducer
在 reducers
文件夹中创建一个 counter.reducer.ts
文件,定义你的 reducer:
import { createReducer, on } from '@ngrx/store';
import { increment, decrement, reset } from '../actions/counter.actions';
export const initialState = 0;
const _counterReducer = createReducer(
initialState,
on(increment, state => state + 1),
on(decrement, state => state - 1),
on(reset, state => 0)
);
export function counterReducer(state, action) {
return _counterReducer(state, action);
}
使用 Store
在你的组件中,注入 Store
并使用它:
import { Component } from '@angular/core';
import { Store } from '@ngrx/store';
import { Observable } from 'rxjs';
import { increment, decrement, reset } from './actions/counter.actions';
@Component({
selector: 'app-root',
template: `
<button (click)="increment()">Increment</button>
<div>Current Count: {{ count$ | async }}</div>
<button (click)="decrement()">Decrement</button>
<button (click)="reset()">Reset</button>
`
})
export class AppComponent {
count$: Observable<number>;
constructor(private store: Store<{ counter: number }>) {
this.count$ = store.select('counter');
}
increment() {
this.store.dispatch(increment());
}
decrement() {
this.store.dispatch(decrement());
}
reset() {
this.store.dispatch(reset());
}
}
应用案例和最佳实践
应用案例
ngrx/store 可以用于管理复杂的状态,例如用户认证、购物车状态、表单数据等。以下是一个简单的用户认证状态管理的例子:
// actions/auth.actions.ts
import { createAction, props } from '@ngrx/store';
export const login = createAction('[Auth] Login', props<{ username:
登录后查看全文
热门内容推荐
1 freeCodeCamp JavaScript高阶函数中的对象引用陷阱解析2 freeCodeCamp全栈开发课程中测验游戏项目的参数顺序问题解析3 freeCodeCamp英语课程视频测验选项与提示不匹配问题分析4 freeCodeCamp音乐播放器项目中的函数调用问题解析5 freeCodeCamp 课程中关于角色与职责描述的语法优化建议 6 freeCodeCamp博客页面工作坊中的断言方法优化建议7 freeCodeCamp猫照片应用教程中的HTML注释测试问题分析8 freeCodeCamp论坛排行榜项目中的错误日志规范要求9 freeCodeCamp课程页面空白问题的技术分析与解决方案10 freeCodeCamp课程视频测验中的Tab键导航问题解析
最新内容推荐
Zap.ts项目数据库系统深度解析:基于Drizzle ORM的现代化实践 LLM.Codes 项目解析:将现代文档转换为AI友好的Markdown格式 LLM-Codes项目部署指南:从开发到生产环境全流程解析 Cherrygram项目9.3.0版本更新深度解析 Roborazzi 1.45.0版本发布:修复Dialog背景遮罩与BoxWithConstraints兼容性问题 Coinbase OnchainKit 0.38.8版本发布:批量ENS解析与钱包交互优化 M9A项目v3.8.0版本发布:多平台适配与功能增强 FleetBase v0.7.0 版本发布:物流管理系统的全面升级 Godot-Game-Template项目v0.22.0版本发布:UI音效与音频系统优化 EDDiscovery 18.1.9版本更新:星际探索工具的全面升级
项目优选
收起

🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
51
15

React Native鸿蒙化仓库
C++
116
200

🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
503
398

openGauss kernel ~ openGauss is an open source relational database management system
C++
62
144

本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
295
1.01 K

旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
97
251

🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
381
37

前端智能化场景解决方案UI库,轻松构建你的AI应用,我们将持续完善更新,欢迎你的使用与建议。
官网地址:https://matechat.gitcode.com
692
91

🎉 基于Spring Boot、Spring Cloud & Alibaba、Vue3 & Vite、Element Plus的分布式前后端分离微服务架构权限管理系统
Vue
97
74

本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
357
341