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

React Native应用中redux-form未触发校验且提交无值问题求助

问题分析与解决方案

看起来你遇到的核心问题是redux-form无法正确读取到表单状态,导致验证函数只执行一次、提交拿不到值。我帮你排查了代码,发现问题出在reducer的挂载路径上:

你的rootReducer把formReducer挂载到了forms这个key下,但redux-form默认会从Redux状态树的form路径去读取表单状态。这就造成了组件和状态之间的“失联”——虽然你能看到redux-form的action触发、状态变化,但表单组件根本找不到这些状态,自然不会触发后续的验证和提交逻辑。

解决办法(二选一即可)

方法1:改用默认的form键(最简单推荐)

直接修改rootReducer,把forms改成form,符合redux-form的默认配置:

const rootReducer = combineReducers({
  form: formReducer // 这里把forms改为form
})

方法2:自定义状态路径(如果必须用forms键)

如果你需要保留forms作为reducer的key,需要在reduxForm的配置里添加getFormState,告诉组件去哪里读取表单状态:

const MyConnectedForm = reduxForm({
  form: 'myform',
  validate,
  getFormState: (state) => state.forms // 指定从state.forms获取表单状态
})(MyForm)

同时保持rootReducer的配置不变:

const rootReducer = combineReducers({
  forms: formReducer
})

额外优化建议

另外,你的renderInput组件可以补充传递value属性,避免输入框可能出现的显示异常(虽然这不是当前问题的核心,但能提升体验):

const renderInput = ({ input: { onChange, value, ...restInput } }) => {
  return <TextInput onChangeText={onChange} value={value} {...restInput} />
}

修改后重新运行,你应该就能看到验证函数在输入变化时触发,点击提交也能拿到正确的表单值了。

内容的提问来源于stack exchange,提问作者Andreas Du Rietz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:16:50