NgRx 是一个用于 Angular 应用的状态管理库,它基于 Redux 模式。Reducer 是 NgRx 中的一个核心概念,它是一个纯函数,用于处理状态的更新。如果 reducer 返回了未定义的值,这通常意味着在 reducer 函数中存在逻辑错误。
Reducer: 一个纯函数,接收当前状态和一个动作(action),然后返回新的状态。Reducer 必须始终返回一个有效的状态对象。
Action: 描述发生了什么事情的对象。它通常包含一个 type
字段和一个可选的 payload
字段。
State: 应用的当前状态,通常是一个 JavaScript 对象。
undefined
。undefined
。type
或 payload
,导致 reducer 无法正确处理。case
语句,确保每个动作类型都有对应的处理逻辑,并且每个分支都返回了一个有效的状态对象。case
语句,确保每个动作类型都有对应的处理逻辑,并且每个分支都返回了一个有效的状态对象。type
和 payload
。type
和 payload
。NgRX 的 reducer 在以下场景中非常有用:
假设我们有一个简单的计数器应用,我们可以这样定义 reducer 和动作创建器:
// 定义初始状态
const initialState = { count: 0 };
// 定义动作类型
interface IncrementAction {
type: 'INCREMENT';
}
interface DecrementAction {
type: 'DECREMENT';
}
type CounterActionTypes = IncrementAction | DecrementAction;
// 定义 reducer
function counterReducer(state = initialState, action: CounterActionTypes): typeof initialState {
switch (action.type) {
case 'INCREMENT':
return { ...state, count: state.count + 1 };
case 'DECREMENT':
return { ...state, count: state.count - 1 };
default:
return state;
}
}
// 定义动作创建器
export const increment = (): IncrementAction => ({ type: 'INCREMENT' });
export const decrement = (): DecrementAction => ({ type: 'DECREMENT' });
通过这种方式,我们可以确保 reducer 总是返回一个有效的状态对象,避免了返回 undefined
的问题。
领取专属 10元无门槛券
手把手带您无忧上云