我正在使用redux-form包在react-native中构建一个类似向导的表单,但是并没有像example那样有条件地呈现每个步骤。
某些重要的设计要求:
到目前为止,我已将所有不同的步骤内置到水平FlatList组件中并且它可以正常工作,但是,由于其他步骤的字段已呈现且尚未生效,因此我无法禁用Continue
按钮使用this.props.invalid
标志的每步骤基础,这是我最初尝试做的。在该示例中,启用了每个步骤的提交按钮,允许您提交表单并触发当前步骤的任何待处理验证。
我的问题是:有没有办法对这些单独的字段进行分组并获得某种类型的更新道具以便考虑步骤valid
,或者我可以为每个步骤使用不同的表单名称然后合并不同的提交最后一个的步骤/表格?
感谢使用redux-forms对此类设置的任何见解,谢谢!
答案 0 :(得分:0)
我使用redux表单getFormSyncErrors
选择器解决了我的问题。
import {
reduxForm,
Field,
getFormSyncErrors
} from 'redux-form';
首先,您创建的选择器将添加syncErrors
道具,其中包含当前未通过同步验证规则的字段数组。
Component = connect(
state => ({
syncErrors: getFormSyncErrors('formName')(state)
})
)(Component);
然后在我的组件中,我比较了当前步骤需要验证的字段,并检查它们在syncErrors
数组中的存在。如果当前步骤没有错误,则会启用Continue
按钮。
render(){
const { syncErrors } = this.props;
const fields = ['first_name', 'last_name', 'email'];
const errorFields = syncErrors ? Object.keys(syncErrors) : [];
const hasErrors = fields.some(el => errorFields.indexOf(el) >= 0);
return(
{...Fields}
<ActionButton
text='Continue'
handleButtonPress={this.goToStep}
disabled={this.props.pristine || hasErrors}
/>
)
}