Skip to content

вложенные fieldArray: создание и удаление полей [bug] #235

@xaota

Description

@xaota

странный кейс

есть filedArray, такой что по-умолчанию есть одно поле
при этом весь этот блок может быть скрыт по какому-то условию

const { map, push, remove } = useFieldArray({ name: "nested" });
useEffect(() => {
  push({ id: uuid() })     // по-умолчанию создается одно поле
  return () => remove(0);  // в идеале бы здесь вызвать removeAll, но это уже другая issue
                           // если не вызывать удаление при сносе компонента, то
                           // при появлении его снова будет вызываться маунт-эффект
                           // и создаваться второе поле и так каждый раз
}, []);

фокус в том, что внутри этого fieldArray есть вложенные поля тоже fieldArray с абсолютно такой же логикой

если мы сносим рутовый fieldArray, то вызывается remove у вложенных, где-то там он у себя глючит и создает рутовый компонент обратно, только с id = undefined (ну и кидает в консоль ошибку что одинаковые react-key)

текущее решение

  • не удалять блоки с fieldArray, а скрывать их, но тогда валидацию надо сносить
  • отказаться от строки return () => remove(0) тогда удаление рута работает нормально, но появляется проблема из камментов

предложения:

  • доработать remove на такой случай
  • добавить в useFieldArray параметры mount / unmount, которые внутри себя будут корректно обрабатывать такие кейсы
  • добавить возможность программного включения / отключения валидации у поля

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions