我有一个特定于redux形式的问题。
我的表单中有一个隐藏的输入:
<input type="hidden" {...field} />
并且希望通过向服务器发出请求来执行一些异步验证。实现这一目标的最优雅/最合适的方式是什么?我一直在研究异步模糊验证,这似乎是正确的事情,除了隐藏的输入似乎无法触发模糊事件这一事实。
编辑
通过将以下中间件代码连接到Redux,我成功地得到了我想要的东西:
if (action.type === ActionTypes.MY_EVENT) {
MyModule.asyncValidate({
myField: store.getState().form.myForm.myField.value,
}).catch((error) => {
store.dispatch(stopAsyncValidation('myForm', error));
});
}
是的,当隐藏的输入模糊时,询问如何做某事就像当你的水干涸时询问如何做一样。
隐藏输入的概念在redux-form
中并不真正存在,因为隐藏输入是基于旧的HTML提交表单的方式。redux-form
中的"隐藏输入"只是出现在fields
列表中的字段(因此它将被提交),但不会呈现给任何输入。我对主键执行此操作,其中我的fields
列表是['id', 'name', 'email']
,并且我只呈现name
和email
的输入,但这三个都已提交。
我认为您想要的是在渲染(非隐藏)字段模糊时激发异步验证,并将所有字段,甚至是未渲染的字段,传递给异步验证函数。对于上面的例子,类似这样的东西会起作用:
reduxForm({
form: 'myForm',
fields: ['id', 'name', 'email'],
asyncValidate: doServerSideAsyncValidation,
asyncBlurFields: ['name', 'email'] // both rendered fields will trigger async validation
})