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

React Redux状态仅第二次点击提交时生效,应如何排查解决?

问题产生原因
  • fetchLoginData是异步请求方法,调用后没有加await等待请求执行完成,就直接判断登录状态,此时Redux还没完成状态更新,第一次判断取到的是请求前的旧状态
  • 你在函数外部提前把props赋值给了局部变量data,这个局部变量不会响应props的更新,第一次点击时判断的永远是点击前的状态,直到第二次点击时才能拿到第一次请求后更新的状态值
修复方案

方案一:等待异步请求完成后直接判断(推荐)

首先确保你的fetchLoginData异步Action(如基于redux-thunk实现)返回了请求对应的Promise,之后修改代码如下:

const {fetchLoginData} = props;

async function onSubmit() {
  // 等待异步登录请求执行完成
  await fetchLoginData(phoneNo);
  // 直接从最新的props取状态,不要提前缓存props到局部变量
  if(props.login) {
    props.navigation.navigate('ScreenName')
  } else {
    alert("User Not Registered")
  }
}

方案二:监听状态变化触发跳转

如果不方便修改Action返回Promise,可以通过监听登录状态的变化自动执行跳转逻辑:

import { useEffect } from 'react';

const {fetchLoginData, login} = props;

// 监听login状态变化,状态变为true时自动跳转
useEffect(() => {
  if(login) {
    props.navigation.navigate('ScreenName')
  }
}, [login, props.navigation])

async function onSubmit() {
  fetchLoginData(phoneNo);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:15:03