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
相关产品推荐
相关产品推荐

