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

无法从组件获取Redux state,AuthReducer未正确识别状态变量问题求助

核心问题原因

  • 你在store.js中没有使用Redux提供的combineReducers方法合并多个reducer,反而直接定义了一个返回reducer对象的普通函数传给createStore,导致Redux没有正确初始化各个子reducer的状态,这就是你看到state里只有两个reducer函数、拿不到实际状态、AuthReducer主逻辑不执行的根本原因。
  • mapStateToProps里取值路径错误,合并reducer后,AuthReducer的状态会挂载到state.AuthReducer下,你直接取state.isLoggedIn必然返回undefined。

修复步骤

1. 修复store.js代码

替换原store.js中的reducer定义和store创建逻辑:

import { createStore, compose, applyMiddleware, combineReducers } from 'redux'
import AuthReducer from './Auth/AuthReducer'
import RegisterReducer from './Register/RegisterReducer'
import thunk from 'redux-thunk'

const composeEnhancers = (typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) || compose

// 使用combineReducers合并多个子reducer
const rootReducer = combineReducers({
  AuthReducer, 
  RegisterReducer
})

const store = createStore(
  rootReducer, 
  composeEnhancers(applyMiddleware(thunk)),
)

export default store

2. 修复App.js中mapStateToProps的取值路径

const mapStateToProps = (state) => {
  console.log(state)
  // AuthReducer的状态挂载在state.AuthReducer字段下
  console.log(state.AuthReducer.isLoggedIn)
  return {
    isLoggedIn: state.AuthReducer.isLoggedIn,
    accessToken: state.AuthReducer.accessToken
  }
}

3. 启用session缓存读取逻辑(可选)

放开AuthReducer中注释的getAuthState逻辑,初始化state时调用即可,应用启动时就会自动从sessionStorage读取历史登录状态同步到Redux。

4. 实现路由重定向逻辑

在对应路由组件中加登录状态判断即可,例如Login组件:

// Login.js
import { Redirect } from 'react-router-dom'
import { connect } from 'react-redux'

const Login = (props) => {
  // 已登录用户访问登录页直接跳转到/test
  if (props.isLoggedIn) {
    return <Redirect to="/test" />
  }
  // 原有登录表单逻辑
}
const mapStateToProps = state => ({
  isLoggedIn: state.AuthReducer.isLoggedIn
})
export default connect(mapStateToProps)(Login)

/test页面同理,判断如果isLoggedIn为false就重定向到/login页面即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:54:04