Ответьте на загрузку файла формы крючка, длина файла равна 0, и после отправки все поля будут сброшены, кроме опции выбора

#reactjs #react-hooks #react-hook-form

Вопрос:

   function Donate() {
      const {
        register,
        handleSubmit,
        watch,
        formState: { errors },
        reset,
      } = useForm();
      const makePayment = (data) => {
        console.log(data);
        reset();
      };
      return (
        <div>
          <Container>
            <Row>
              <Col sm={18} md={8} lg={8} className="mx-auto">
                <Form onSubmit={handleSubmit(makePayment)}>
                  <Form.Group className="mb-3" controlId="name">
                    <Form.Label>Name</Form.Label>
                    <Form.Control
                      type="text"
                      placeholder="Enter name"
                      {...register("name")}
                    />
                   
                  </Form.Group>
                  <Form.Group className="mb-3" controlId="email">
                    <Form.Label>Email address</Form.Label>
                    <Form.Control
                      type="email"
                      placeholder="Enter email"
                      {...register(
                        "email"
                       
                      )}
                    />
                    
                  </Form.Group>
                  <Form.Group className="mb-3" controlId="file">
                    <Form.Label>Image</Form.Label>
                    <Form.Control type="file" {...register("file")} />
                    
                  </Form.Group>
                  <Form.Group className="mb-3" controlId="pnumber">
                    <Form.Label>Phone Number</Form.Label>
                    <Form.Control
                      type="text"
                      placeholder="Enter phone number(without 0/ 91)"
                      {...register("pnumber")}
                    />
                    </Form.Group>
                  <Form.Group controlId="studiesorjob">
                    <Form.Label>Doing Studies or Job</Form.Label>
                    <Form.Control
                      as="select"
                      {...register("studiesorjob")}
                    >
                      <option selected disabled></option>
                      <option value="studies">Studies</option>
                      <option value="job">Job</option>
                    </Form.Control>
                  </Form.Group>
                  <Form.Group className="mb-3" controlId="amount">
                    <Form.Label>Amount you'd like to donate</Form.Label>
                    <Form.Control
                      placeholder="Amount"
                      type="number"
                      min="1"
                      {...register("amount")}
                    />
                    
                  </Form.Group>
                  <Button variant="primary" type="submit">
                    Submit
                  </Button>
                </Form>
              </Col>
            </Row>
          </Container>
        </div>
      );
    }
 

Здесь, в этом коде, я пытаюсь загрузить файл вместе с другими полями, но длина файла показывает 0. Также при отправке в разделе «Оплата» длина файла отображается 0, и каждое поле сбрасывается после отправки, за исключением поля Выбора опции. В этом я использую библиотеку npm-формы react hook.
Выберите сброс не происходит, и загрузка файла не работает.

Ответ №1:

Пожалуйста, удалите reset() вызов события отправки формы, добавьте вызов rest после вызова api, например, отправьте форму, вызовите api отправки, затем в случае успешного ответа вызовите reset() ;

Кроме того, я не уверен <Form.Control type="file" {...register("file")} /> , что здесь вам следует добавить <Form.Control as="input" type="file" {...register("file")} /> , может быть, это также вызывает проблему.