react-component / form

React High Order Form Component(web & react-native)
http://react-component.github.io/form/
MIT License
1.81k stars 296 forks source link

validateFields 返回的error是无序的吗? #344

Open wanxue0804 opened 5 years ago

wanxue0804 commented 5 years ago
  const  { validateFields, getFieldError } = this.props.form;
    validateFields((error, value) => {
    console.log(error, value);
      if (error) {
        Toast.info(getFieldError(Object.keys(error)[0]));
      };
    });

当前有两个输入框(mobile, code)都是必填,一进入页面的未编辑的时候打印 error: code, mobile value: mobile, code 编辑后或者第二次点击打印顺序一致mobile, code是对的

我的需求是在react-native 希望用户提交表单的时候弹出第一个必填信息提示,大多数情况下,不需要error的报错信息按表单顺序展示 但是app为了用户体验还是希望能按顺序展示报错

yunsii commented 5 years ago

可能是异步的原因吧,实在要顺序一致的话,应该可以根据表单配置的顺序来取第一个报错?

wanxue0804 commented 4 years ago

可能是异步的原因吧,实在要顺序一致的话,应该可以根据表单配置的顺序来取第一个报错?

表单可能有多个要填的,可能其中1、3填写了2、4没填写,我要弹第二个的错误提示,当2也填了,那就弹4. 就是说我根本不确定用户哪一个未填写,但是我只需要匹配到第一个未填写的就提示用户

yunsii commented 4 years ago

根据表单的字段顺序来取第一个的意思是指:

当表单验证有错误的时候,就按照字段顺序取值。

form.validateFields((err?: any, values?: any) => {
  if (err) { 
    formItems.forEach(element => {
      if (err[element.field]) {
        Toast.fail('error info');
        return;
      }
    });
  }
  // ...
});

H5 页面我是将表单配置抽离为一个 formItems 的配置数组遍历生成表单的,所以遍历一下 formItems ,如果有 err[element.field] ,提示即可。

wanxue0804 commented 4 years ago

根据表单的字段顺序来取第一个的意思是指:

当表单验证有错误的时候,就按照字段顺序取值。

form.validateFields((err?: any, values?: any) => {
  if (err) { 
    formItems.forEach(element => {
      if (err[element.field]) {
        Toast.fail('error info');
        return;
      }
    });
  }
  // ...
});

H5 页面我是将表单配置抽离为一个 formItems 的配置数组遍历生成表单的,所以遍历一下 formItems ,如果有 err[element.field] ,提示即可。

好的 我试试 谢谢了