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

Redux Toolkit首次dispatch时action.payload为undefined,二次调用正常

问题原因与解决方案

问题根源

你遇到的问题核心是useState的更新是异步的。在Formik的onSubmit回调中,你先调用setLuxmedBenefitUser({ ...userProps, ...values }),紧接着就用luxmedBenefitUser触发dispatch。但此时React还没完成这个state的更新,luxmedBenefitUser依然是初始的undefined,导致reducer收到的payload为undefined。当你再次提交时,上一次的state更新已经完成,所以能传递正确的值。

修复方案

不需要依赖state的异步更新结果,直接使用合并后的临时对象作为dispatch的参数即可:

修改Formik的onSubmit逻辑:

onSubmit: (values) => {
  // 直接创建合并后的对象,避免依赖异步更新的state
  const newLuxmedBenefitUser = { ...userProps, ...values };
  // 如果组件后续渲染需要用到这个值,保留setState;否则可以删除这行
  setLuxmedBenefitUser(newLuxmedBenefitUser);
  resetForm();
  displayParagraphHandler();
  // 直接传递临时对象给action
  dispatch(addEditLuxmedBenefitSystemsActions.addEditBenefits(newLuxmedBenefitUser));
}

额外优化

如果luxmedBenefitUser这个state仅用于传递给dispatch,没有在组件其他地方使用,那可以直接删除这个state,减少不必要的状态更新逻辑,让代码更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:33:19