странный кейс
есть 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, которые внутри себя будут корректно обрабатывать такие кейсы
- добавить возможность программного включения / отключения валидации у поля
странный кейс
есть
filedArray, такой что по-умолчанию есть одно полепри этом весь этот блок может быть скрыт по какому-то условию
фокус в том, что внутри этого
fieldArrayесть вложенные поля тожеfieldArrayс абсолютно такой же логикойтекущее решение
return () => remove(0)тогда удаление рута работает нормально, но появляется проблема из камментовпредложения:
removeна такой случайuseFieldArrayпараметрыmount / unmount, которые внутри себя будут корректно обрабатывать такие кейсы