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

React-Native中useSelector获取Redux状态始终返回初始值求助

Redux Toolkit迁移后useSelector获取值异常的解决方案

问题核心原因及修复步骤

1. setEmail reducer与调用参数不匹配

在redux/slices/auth.js的setEmail reducer中,你写的是state.email = action.payload.email,但在LoginScreen的TextInput里调用dispatch(setEmail(value))时,传入的value是字符串类型的邮箱,并非包含email字段的对象。这会导致action.payload.email为undefined,最终store里的email值被设为undefined——虽然TextInput会把undefined显示为空字符串,但实际上store并没有正确保存输入的邮箱内容,自然在按钮点击时拿不到正确值。

修复方式二选一:

  • 修改auth.js的reducer逻辑,直接使用传入的字符串值:
reducers: {
    setEmail: (state, action) => {
        state.email = action.payload; // 直接赋值传入的邮箱字符串
    }
}
  • 或者在调用dispatch时传递包含email字段的对象:
onChangeText={(value) => dispatch(setEmail({ email: value }))}

2. 未在组件中获取dispatch实例

在LoginScreen组件中,你直接使用了dispatch函数,但没有通过useDispatch() Hook获取它的实例。这会导致dispatch未定义,理论上会抛出错误,你提到TextInput能更新状态可能是实际代码中遗漏了这部分,但精简代码时没体现。

修复方法:
在组件内部添加useDispatch()调用:

function LoginScreen({navigation}) {
    const _email = useSelector(selectEmail);
    const dispatch = useDispatch(); // 新增该行获取dispatch实例

    // 其余代码保持不变
}

额外确认

你的App.js已经将根组件正确包裹在Provider中,这部分没问题,但要确保LoginScreen是通过LoadingScreen正确导航进入的,保证它处于Redux上下文范围内。

修复以上问题后,useSelector获取的_email就能在按钮点击时拿到store中的最新值,而非初始状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:54:08