Исходя из ClojureScript, я провел последнюю неделю, пытаясь сделать React и Redux в Javascript. Я был очень доволен результатом, за исключением того факта, что React, похоже, не выполнил своего обещания внести минимальные изменения в DOM. Это стало особенно очевидно, когда я вставил текстовое поле, и оно теряло фокус при каждом нажатии клавиши. Я явно делал что-то очень неправильное.

После нескольких часов прогрева дата-центров Google я был готов сдаться. Я поставил ключи на все, переключился на использование React.Fragment вместо массивов, установил React Dev Tools и прочитал все статьи о том, как React решает, что ререндерить. Казалось, ни у кого больше не было моей проблемы, и ничто не могло ее решить.

Именно тогда я внимательно посмотрел на свой главный компонент:

Использование функции AppBody в качестве компонента приводило к тому, что React всегда удалял и повторно вставлял элементы, созданные AppBody. На самом деле вызов его как функции работает нормально. Есть подвох, если я когда-либо видел его.