如何获取Redux store中的isSignedIn值?该值已出现在props属性中
问题排查与解决方案
1. Reducer逻辑错误(核心问题)
你当前的Reducer中直接将接口返回的整个response.data赋值给isSignedIn和userId,大概率不符合业务预期:
// 现有写法存在问题:payload是完整的接口返回用户数据,不是布尔类型的登录标识 case 'SIGN_IN': return {...state, isSignedIn: action.payload, userId: action.payload};
正常需要从返回数据中提取对应字段,修改为:
case 'SIGN_IN': return { ...state, isSignedIn: true, // 如果接口返回了登录状态字段,也可以写为 action.payload.isSignedIn userId: action.payload.userId // 提取接口返回数据中的用户ID字段 };
2. 组件内命名冲突注意
你的Login组件内部state定义了同名的isSignedIn字段,要读取Redux注入的属性,必须使用this.props.isSignedIn,this.state.isSignedIn是组件独立维护的本地状态,两者完全无关,不要混淆。
3. mapStateToProps正确性验证
你写的mapStateToProps语法本身没有错误,唯一需要确认的是根Reducer组合时,鉴权Reducer对应的key为auth:
// 根Reducer写法示例,必须保证此处key和mapStateToProps中的state.auth对应 import { combineReducers } from 'redux'; import authReducer from './你的authReducer文件路径'; export default combineReducers({ auth: authReducer, // 此处key必须为auth,否则state.auth.isSignedIn会读取失败 // 其他业务Reducer });
4. 读取值的测试方式
直接在组件render方法中打印/渲染即可验证:
render() { // 控制台打印查看值 console.log('Redux注入的登录状态:', this.props.isSignedIn) return( <div> {/* 页面直接渲染查看结果 */} <div>当前登录状态:{String(this.props.isSignedIn)}</div> <h4>Email</h4> {/* 原有组件代码保持不变 */} </div> ); };
内容的提问来源于stack exchange,提问作者Gabriel Savian
相关产品推荐
相关产品推荐

