提交失败后,如何使用错误数据更新表单?

时间:2019-02-05 16:48:40

标签: javascript react-final-form

我正在使用react-final-form

void testfun(char **argc) {

    OpenSSL_add_all_algorithms();

    EVP_PKEY *prikey = nullptr, *pubkey = nullptr;
    BIO *prifile = nullptr, *pubfile = nullptr;
    RSA *pubrsa = nullptr, *prirsa = nullptr, *newra = nullptr;

    prifile = BIO_new_file(argc[1], "r");

    char passwd[] = "1111";
    prikey = EVP_PKEY_new();
    prikey = PEM_read_bio_PrivateKey(prifile, nullptr, 0, passwd);

    prirsa = RSA_new();

    /* all those code block combination will cause segmentation fault
     * 1-3
     * 1-4
     * 2-3
     * 2-4
     * and output will be correct if i only use code block 3
     * */

    //1
    //cout << EVP_PKEY_assign_RSA(prikey, prirsa) << endl;

    //2
    //cout << EVP_PKEY_set1_RSA(prikey, prirsa) << endl;

    //3
    //cout << EVP_PKEY_size(prikey) << endl;

    //4
    //cout << RSA_size(prirsa) << endl;
}

让我们说回来的错误是关于名称不是唯一的。

我想根据来自<Form onSubmit={ (values) => makeAPICall(values).catch(e => ????) } > ... <Field name='name'> ... </Filed> ... </Form> 的消息在Field上设置错误。

我不知道如何从e内部修改表单状态。

1 个答案:

答案 0 :(得分:1)

react-final-form项目有一个有关提交错误处理的代码框。
在这里:https://codesandbox.io/s/9y9om95lyp

基本上,在Forms渲染道具中,您必须向其传递一个包含submitError的结构化对象,并检查字段中是否存在提交错误。

<Form
  onSubmit={values => makeAPICall(values).catch(e => return { username: e })}
  // ...
  render={({
    handleSubmit,
    values,
    // ...
   }) => (
    <form onSubmit={handleSubmit}>
      <Field name="username">
        {({ input, meta }) => (
          <div>
            <label>Username</label>
            <input {...input} type="text" placeholder="Username" />
            {meta.submitError && meta.touched && <span>{meta.submitError}</span>}
          </div>
        )}
      </Field>
    </form>
   )}
/>