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

Redux出现TypeError及Reducer状态类型不匹配问题求助

问题排查与解决

错误原因

你的createStore调用参数顺序完全错误,导致Redux无法正确处理reducer和中间件:

  • createStore的正确签名是:createStore(reducer, preloadedState?, enhancer?)
  • 你当前把middleware放在第一个参数位置(本该传入reducer),把reducer放在第二个位置(本该传入初始状态),这会让Redux把middleware当作reducer执行,最终导致整个应用的state变成Function类型,而非预期的包含authedUser、users、tweets的对象。
  • 当action触发时,reducer处理的state是函数,后续尝试读取action.type时就会抛出Cannot read properties of undefined (reading 'type')错误。

修复方案

修正createStore的参数顺序,并正确组合中间件:

修正后的store配置代码

import React from 'react'
import ReactDOM from 'react-dom'
import './index.css'
import App from './components/App'
import { createStore, applyMiddleware } from 'redux'
import { Provider } from 'react-redux'
import reducer from './reducers'
import middleware from './middleware'
import logger from 'redux-logger'

// 正确组合多个中间件
const composedEnhancers = applyMiddleware(middleware, logger)

const store = createStore(
  reducer, // 第一个参数必须是根reducer
  // 可选:传入自定义初始状态,无需求可留空
  composedEnhancers // 第三个参数是中间件增强器
)

ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>, 
  document.getElementById('root')
)

额外说明

  • 如果你的./middleware是自定义中间件数组或单个中间件,直接在applyMiddleware中传入即可,多个中间件用逗号分隔。
  • 确保users和tweets reducer的初始状态符合业务逻辑(通常为对象或数组),避免后续状态结构异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:39:14