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和tweetsreducer的初始状态符合业务逻辑(通常为对象或数组),避免后续状态结构异常。
内容的提问来源于stack exchange,提问作者mai mohamed
相关产品推荐
相关产品推荐

