AddForm
функция создается при каждом рендеринге, поэтому с перспективы React
AddForm
это другой компонент, вызывающий воссоздание связанных элементов DOM, из-за чего элемент ввода теряет фокус.
Переместите AddForm
за пределы App
(и пропустите в него необходимые данные через реквизит).
, почему AddForm не рендерится, когда он находится вне приложения, и почему элементы неповторно визуализируется, когда они находятся прямо внутри приложения?
React эффективно обновляет DOM, изменяя только вещи, которые отличаются, но не идеальны. Он сравнивает компоненты с ===
и, если они не совпадают, удаляется все дерево.
Поскольку вы воссоздаете AddForm
при каждом рендеринге, текущий AddFrom
не равен предыдущему AddFrom
. Это заставляет React удалить form
, связанный с AddForm
, и создать еще один вместо него.
Когда вы помещаете AddForm
снаружи, ток AddForm
равен предыдущему AddForm
, поэтому React просто сравниваетвозвращает значения предыдущего и текущего AddForm
и обновляет DOM, связанный с AddForm
(то есть просто добавляет еще один символ в поле ввода)