Я изменил ваш код, чтобы мы могли добавлять блоки (для удаления используйте аналогичный подход), предполагая, что все блоки будут иметь одинаковую структуру.Кроме того, я разделил ваш «рендер» на несколько «рендеров», которые отображают различные части программы, чтобы было легче читать.
https://codesandbox.io/s/xjzlzqj04z
Идея заключается в следующем: каждый разВы нажимаете кнопку Добавить блок, вы проверяете все строки, делая копию в переменную "newRows".Finnaly, я делаю толчок к newRows с новыми данными, которые мы хотим добавить, в этом случае и добавляя подходящий идентификатор.
В частности, в случае этой структуры я настоятельно рекомендую, чтобы каждая строка была отдельнойреагировать компонент, больше, если структура одинакова для каждой строки (текст + ввод).Если вы делаете это с дополнительным компонентом реакции, вы можете управлять блоком добавления или удаления с состоянием, представляющим собой простой массив идентификаторов, вместо добавления всей структуры, и всей логикой (onchange value, delete) можно управлятьвнутри другого компонента.Если вы хотите получить доступ к значению всех компонентов в базовом компоненте, вы можете добавить в качестве реквизита «updateValue», которое получит идентификатор и обновит состояние.Я постараюсь сделать пример и обновить его позже
edit: здесь у меня есть пример со строками, добавленными в качестве другого компонента.Это сильно упрощает логику состояния, но это также зависит от ваших потребностей.
https://codesandbox.io/s/4xq4w37v1w
Я должен сказать, что codesandbox немного глючит с реакцией, поэтому, если он не работает, я рекомендую«выбрать все -> вырезать -> вставить»