NgRX 是一个用于 Angular 应用的状态管理库,它基于 Redux 模式。在 NgRX 中,效果(Effects)用于处理副作用,如异步操作,而减少器(Reducers)用于同步更新状态。
效果(Effects):
减少器(Reducers):
假设我们有一个状态集合(例如一个用户列表),我们想要添加一个新的用户到这个列表中。
动作(Action):
export const addUser = createAction(
'[User] Add User',
props<{ user: User }>()
);
减少器(Reducer):
export const initialState = {
users: []
};
export const userReducer = createReducer(
initialState,
on(addUser, (state, { user }) => ({
...state,
users: [...state.users, user]
}))
);
在这个例子中,addUser
动作会触发 userReducer
,后者将新的用户对象添加到 users
数组中。
NgRX 使用 @ngrx/store
中的 createReducer
和 on
辅助函数来定义减少器。这种语法是基于函数式编程的,它使得状态更新逻辑清晰且易于测试。
如果你在更新状态集合时遇到问题,比如状态没有按预期更新,可能的原因包括:
解决方法:
immer
库来简化不可变状态的更新。import { createAction, createReducer, on } from '@ngrx/store';
export interface User {
id: number;
name: string;
}
export const initialState = {
users: []
};
export const addUser = createAction(
'[User] Add User',
props<{ user: User }>()
);
export const userReducer = createReducer(
initialState,
on(addUser, (state, { user }) => ({
...state,
users: [...state.users, user]
}))
);
在这个示例中,我们定义了一个 addUser
动作和一个处理该动作的减少器。当 addUser
动作被分发时,新的用户会被添加到 users
数组中。
没有搜到相关的文章