【问题标题】:How to use actions on Formik forms?如何在 Formik 表单上使用操作?
【发布时间】:2020-04-06 12:16:00
【问题描述】:

我想在每次提交表单时重置我的 Formik 表单。而不是submitForm(email);我正在尝试submitForm(actions, email),这样我就可以打电话了

actions.resetForm()

submitForm() 里面,但我得到Cannot find name 'actions'.ts(2304)

 let submitForm = (email: string) => {
    setIsSubmitted(true);
    removeUser({
      variables: {
        email: email,
      },
    })
      .then(({ data }: ExecutionResult<DeleteUserResponse>) => {
          setIsRemoved(true);
      })
      .catch((error: { message: string }) => {
        setIsRemoved(false);
      });
  };

  return (
    <div>
      <Formik
        initialValues={{ email: '' }}
        onSubmit={(values, actions) => {
          setTimeout(() => {
            alert(JSON.stringify(values, null, 2));
            actions.setSubmitting(false);
          }, 1000);
        }}
        validationSchema={schema}>
        {props => {
          const {
            values: { email },
            errors,
            touched,
            handleChange,
            isValid,
            setFieldTouched,
          } = props;
          const change = (name: string, e: FormEvent) => {
            e.persist();
            handleChange(e);
            setFieldTouched(name, true, false);
          };
          return (
            <div className="main-content">
              <form
                style={{ width: '100%' }}
                onSubmit={e => {
                  e.preventDefault();
                  submitForm(email);
                }}>
                <div>
                  <TextField
                    variant="outlined"
                    margin="normal"
                    id="email"
                    name="email"
                    helperText={touched.email ? errors.email : ''}
                    error={touched.email && Boolean(errors.email)}
                    label="Email"
                    value={email}
                    onChange={change.bind(null, 'email')}
                  />
                  <br></br>
                  <CustomButton
                    disabled={!isValid || !email}
                    text={'Remove User'}
                  />
                </div>
              </form>
            </div>
          );
        }}
      </Formik>
    </div>
  );

或者如果有更简单的方法来重置文本字段,那也很好。

【问题讨论】:

    标签: javascript reactjs typescript forms formik


    【解决方案1】:

    改变

    onSubmit={e => {
        e.preventDefault();
        submitForm(email);
        }}>
    

      onSubmit={e => {
            e.stopPropagation()
              handleSubmit(e)
            }}>
    

    中添加handleSubmit事件
    const {
                values: { email },
                errors,
                touched,
                handleChange,
                isValid,
                setFieldTouched,
                 handleSubmit        <-- this
              } = props;
    

    在提交时

    onSubmit={(values, actions) => 
    

    添加功能

    submitForm(values.email);
    

    注意:onsubmit 是&lt;Formik onSubmit={... 的属性 你可以得到这个函数的所有值 不要来自&lt;form onSubmit

    【讨论】:

    • 您能补充一下我如何编写handleChange吗?我无法在 Typescript 中获得正确的语法。另外,我已经在使用onSubmit={(values, actions) =&gt;。我应该在超时后通过submitForm(values.email);吗?恐怕会扰乱程序逻辑
    • 或者如果有更简单的方法来重置文本字段,那也很好。
    • @a125 尝试使用
    • 不要使用 onChange={change.bind(null, 'email')} 删除它
    猜你喜欢
    • 2021-01-30
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 2019-11-18
    相关资源
    最近更新 更多