能否不借助NGRX的createReducer函数创建Reducer?
问题:是否可以不使用createReducer函数创建Redux Reducer?
我在梳理一份现有代码时,发现有一个未使用createReducer函数语法创建的reducer。下方代码片段中的reviewReducer函数接收与标准reducer相同数量和类型的参数,且能响应action(已通过调试验证)。但奇怪的是,我在create-reducer.ts文件乃至整个应用中都找不到createReducer函数,因此想确认是否可以不使用该函数创建reducer?
代码片段(create-reducer.ts)
import { Action } from 'rxjs/scheduler/Action'; export function reviewReducer(state: State<Any>, action: ReviewActionList) { return { ...state, result: true } }
回答
完全可以不使用createReducer函数来创建Reducer。
Redux对Reducer的核心定义非常简单:它就是一个纯函数,只要满足以下两个要求就有效:
- 接收两个参数:当前应用状态
state和触发的动作action - 返回一个全新的状态对象(禁止直接修改原state,必须通过复制+修改的方式生成新状态)
你贴出的reviewReducer完全符合这个标准:它正确接收state和action参数,通过扩展运算符...state复制原状态并更新result字段,返回了新的状态对象,这是最原生、最标准的Reducer写法。
至于createReducer,它只是Redux生态(比如Redux Toolkit)提供的语法糖工具,作用是简化Reducer的编写流程(比如用对象映射替代冗长的switch-case判断),但它并非Redux的必需组件。很多早期Redux项目或者追求轻量的项目,都会直接采用纯函数形式编写Reducer,完全合法且有效。
你在项目中找不到createReducer函数,说明这个项目从一开始就没有依赖这个工具函数,而是直接使用了原生的Reducer写法,这是完全合理的实现方式。
内容的提问来源于stack exchange,提问作者VA1267
相关产品推荐
相关产品推荐

