代码之家  ›  专栏  ›  技术社区  ›  chobo2

将参数从一个箭头函数传递到另一个箭头函数?

  •  1
  • chobo2  · 技术社区  · 6 年前

    我在reactjs中使用formik,有一个onsubmit方法,它有一个setsubmitting参数。我想把它传给我的“然后”方法,但不知道怎么做。

      onSubmit={(values, { setSubmitting, setErrors }) => {
    
                setSubmitting(true);
    
                // how can I get away from doing this.
                const submitting = setSubmitting;
    
                  ajaxMethod(values)
                  .then(() => {
                    submitting(false);  // how could I just call setSubmitting.             
                  })
                  .catch((error, ) => {
    
                    submitting(false);
                  });
              }}
    

    编辑

     <Formik
              initialValues={{
              }}
              validationSchema={Yup.object().shape({
              })}
              onSubmit={(values, { setSubmitting, setErrors }) => {
                setSubmitting(true);
    
                const submitting = setSubmitting;
    
                ajaxMethod(values)
                  .then(() => {
                    setSubmitting(false);
                  })
                  .catch((error, setSubmitting) => {
                    setSubmitting(false);
                  });
              }}
              render={props => (
                <Form autoComplete="off" id="record-payment-form">
    
                </Form>
              )}
            />
    
    
     ajaxMethod: flow(function*(formData) {
    
        })
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Bergi    6 年前

    你不需要当地人 submitting 变化无常。打电话 setSubmitting :

    (values, { setSubmitting, setErrors }) => {
        setSubmitting(true);
    
        ajaxMethod(values).then(() => {
            setSubmitting(false);
        }).catch((error) => {
            setSubmitting(false);
        });
    }
    

    顺便说一句,你可能会想用 finally 而是:

    (values, { setSubmitting, setErrors }) => {
        setSubmitting(true);
    
        ajaxMethod(values).finally(() => {
            setSubmitting(false);
        });
    }