ReactJS FilePond - загрузка в один компонент FilePond очищает состояние других компонентов FilePond на той же странице

Этот вопрос касается Filepond в ReactJS. Документация по файлоунду здесь: https://pqina.nl/filepond/docs/patterns/frameworks/react/

[EDIT] Автономная песочница кода, воспроизводящая проблему только с соответствующим кодом, находится здесь: https://codesandbox.io/s/react-filepond-forked-cvck1?file=/src/App.js

Я сделал этот компонент, который является оболочкой вокруг FilePond:

export const FormFilePond = ({ id, state, updateFormState, ...props }) => (
  <Box borderWidth={5} borderRadius={10} borderStyle='dashed'>
    <FilePond
      style={{'margin-bottom':0}}
      name={id}
      files={state}
      onupdatefiles={
        fileItems => {
          console.log("Updating filepond: ", id)
          updateFormState(id, fileItems.map(fileItem => fileItem.file))
        }
      }
      {...props}
    />
  </Box>
)

(Вызов console.log() проиллюстрирует проблему ниже.)

У меня есть несколько FormFilePond экземпляров на одной странице с уникальными id. value и updateFormState определены в другом месте с помощью React.useState в родительском компоненте, так что это управляемый компонент. updateFormState в основном ищет ключ (id) в объекте, который отслеживает все состояние формы, и обновляет только значение этого ключа. Тем не менее, я думаю, что это, вероятно, проблема, связанная с FilePond, поскольку у меня есть несколько других компонентов ввода формы, которые все правильно контролируют состояние с помощью тех же функций. Эта проблема возникает только у компонента FilePond.

<FormFieldComponent
   id={id}
   state={value}
   updateFormState={updateFormState}
   {...props}
 />

Допустим, у меня есть два экземпляра FilePond с id "foo" и "bar". Во-первых, когда я загружаю файл в "foo" FilePond, консоль регистрирует:

Updating filepond:  foo
Updating filepond:  foo

И я правильно вижу загруженный файл в компоненте FilePond, хотя не понимаю, почему он обновляется дважды. [Отредактируйте, чтобы добавить: Ни один из других компонентов формы (ввод, текстовое поле, флажок и т.д.) не обновляется дважды, когда я console.log обновления, они регистрируются только один раз.] Затем я пытаюсь загрузить изображение в "bar" FilePond. Я получаю это:

Updating filepond:  bar
Updating filepond:  bar
Updating filepond:  foo
Updating filepond:  bar

Вышеупомянутое на самом деле происходит в быстрой последовательности:

  1. Когда первые две строки записываются в консоль, я вижу, что файл успешно загружен в компонент панели на долю секунды, но затем:
  2. Вторые две строки записываются в консоль, и состояния компонентов foo и bar очищаются. Оба FilePonds потеряли свои файлы и снова пусты.

Почему это происходит и как это исправить? Я хочу следующее: иметь несколько отдельных FilePonds, которые отслеживают разные файлы в разных частях штата. Конечный пользователь должен иметь возможность загружать файлы во все из них.


person cheryllium    schedule 04.10.2020    source источник
comment
github.com/pqina/react-filepond/issues/153   -  person Rik    schedule 13.10.2020


Ответы (1)


Я разместил ту же проблему на Github, и мне ответили: https://github.com/pqina/react-filepond/issues/153

Это был не сбой в Filepond, а логическая ошибка, которую я допустил в состоянии React. См. Объяснение + ресурсы здесь: https://github.com/pqina/react-filepond/issues/153#issuecomment-705948028

(Большое спасибо пользователю Github sweetliquid за помощь.)

person cheryllium    schedule 28.10.2020