Ошибка типа: Не удается прочитать свойство «setFieldValue» неопределенного значения. Formik не распознает значение setFieldValue

#reactjs #formik #formik-material-ui

Вопрос:

Я пытаюсь создать изображение, загруженное в мою форму. Проблема в том, что я пытаюсь изменить значение на фактический загруженный файл. Я пытаюсь использовать значение setFieldValue, но оно говорит, что оно не определено. Ниже приведен код. Есть идеи, почему он не определен? Я думал, что он поставляется с Формиком.

 import { Formik } from 'formik';


const AddProduct = (props) => {

  return (
    <Formik
      initialValues={{
        serviceImage: null
      }}
      
      onSubmit={(values) => {
        console.log(values);
        
      }}
    >
      {({
        errors,
        handleBlur,
        handleChange,
        handleSubmit,
        setFieldValue,
        isSubmitting,
        touched,
        values,
        formProps
      }) => (
        <form onSubmit={handleSubmit}>
          <TextField
            error={Boolean(touched.serviceName amp;amp; errors.serviceName)}
            fullWidth
            helperText={touched.serviceName amp;amp; errors.serviceName}
            label="Service name"
            margin="normal"
            name="serviceName"
            onBlur={handleBlur}
            onChange={handleChange}
            value={values.serviceName}
          />

          <Button>
            <input
              id="file"
              name="serviceImage"
              value={values.serviceImage}
              type="file"
              onChange={(event) => formProps.setFieldValue('serviceImage', event.target)
              }
            />
            Add an Image
          </Button>

            <Button
              type="submit"            >
              Post this service on the Events Platform
            </Button>
        </form>
        
      )}
    </Formik>
  );
};

 

Комментарии:

1. вы уверены, что fromProps это esist? почему бы вам не использовать просто значение setFieldvalue из вашего примера?

2. Это то, что я получаю, если использую его без fromProps. «Неперехваченное исключение DOMException: Не удалось установить свойство «значение» для элемента «HTMLInputElement»: Этот элемент ввода принимает имя файла, которое может быть задано только программно в виде пустой строки.»

Ответ №1:

Вы уже объявили setFieldValue в своей функции обратного вызова formik

Так что измените его на:

 <input
  id="file"
  name="serviceImage"
  value={values.serviceImage}
  type="file"
  onChange={event => setFieldValue('serviceImage', event.currentTarget.files[0])}
/>;
 

Комментарии:

1. Если я использую его таким образом, я получаю эту ошибку. Неперехваченное исключение DOMException: Не удалось установить свойство «значение» в «HTMLInputElement»: Этот элемент ввода принимает имя файла, которое может быть задано только программно в виде пустой строки.

2. Я удалил «значение={values.serviceImage}», и теперь оно работает. Спасибо!

3. Это здорово! Вы можете принять мой ответ, если это полезно и если у других людей есть рекомендации.