You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redux如何识别reducer参数中的state与action?

解惑Redux中Reducer的参数识别问题

嘿,作为Redux新手有这个疑问太正常了——我当初刚接触Redux的时候也纠结过这个点!其实核心逻辑特别简单:Redux根本不关心你给参数起什么名字,它只认参数的传递顺序和你调用它的方式。咱们拆开来说:

关于State的识别

当你写const reducer = (state = {}, action) => {...}的时候:

  • 初始化store时,Redux会自动调用你的reducer一次,这时候它传入的第一个参数是undefined。而state = {}是JavaScript的默认参数语法——当函数的第一个参数没有被传入有效值(这里是undefined)时,就会用这个默认值作为state的初始值,这也就是Redux store的初始状态来源。
  • 之后每次你调用dispatch()触发更新时,Redux会自动把当前store里的最新状态作为第一个参数传给reducer。哪怕你把这个参数命名成currentAppState或者appData,Redux也会把最新状态传给它——它只看这是第一个参数,不看名字。

关于Action的识别

同样的道理,当你dispatch一个action对象(比如dispatch({type: 'INCREMENT', payload: 1}))时:

  • Redux会把你dispatch的这个对象作为第二个参数传给reducer。你把它命名为action只是Redux社区的约定俗成,方便大家统一理解代码。哪怕你叫它updateEvent或者changeSignal,Redux也会把dispatch的对象传给这个位置的参数。
  • 你在switch里用action.type,只是因为你知道这个参数是Redux传过来的action对象,所以去读取它的type属性来判断要执行哪种状态更新逻辑而已——和参数名字本身没关系。

举个反例验证一下

把参数名字改得完全不一样,这个reducer照样能正常工作:

const counterReducer = (currentCount = 0, updateSignal) => {
  switch (updateSignal.type) {
    case 'INCREMENT':
      return currentCount + updateSignal.payload
    case 'DECREMENT':
      return currentCount - updateSignal.payload
    default:
      return currentCount
  }
}

你dispatch{type: 'INCREMENT', payload: 1}的时候,Redux会把当前的currentCount和这个对象分别作为第一、第二个参数传进来,逻辑完全不受影响。

总结一下:Redux是通过固定的参数传递顺序来给reducer传值的,参数名字只是我们写代码时的约定,方便自己和其他开发者理解。state = {}是JS默认参数的用法,用来处理初始化时的undefined;而action.type只是读取Redux传过来的那个对象的属性而已。

内容的提问来源于stack exchange,提问作者pranami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:33:18