Так как основная идея RN это использовать JS для написания приложения, то от нее и будем отталкиваться.
Все исполняется в JS потоке и через мост дергаются OEM виджеты — то однозначно будет лагать.
Но если использовать движки и/или либы для написания игр — то опять вопрос к передаче данных между JS потоком и движком.
А если убрать JS поток — то это уже и не React Native вовсе.
Ну так правильно.
Метод build вызывается каждый раз при setState.
Внутренние методы тоже. Поэтому _weNeedItOnlyOnce вызовется еще раз.
Если обернуть const вызов в функцию — он тоже вызовется еще раз.
Но не сам виджет — он const.
Если const убрать — то будет следующее поведение:
Вариант с функцией.
1) Вызывается функция -> создается виджет -> создается RenderObject и Element.
2) Обновляем State.
3) Вызывается функция -> создается виджет -> НЕ создается RenderObject и Element, а используются те же самые.
Вариант с виджетом:
1) Создается виджет -> создается RenderObject и Element.
2) Обновляем State.
3) Создается виджет -> НЕ создается RenderObject и Element, а используются те же самые.
В обоих случаях новый экземпляр виджета и новый экземпляр BuildContext.
Если const виджет возвращать из функции, то виджет создастся 1 раз и более не пересоздастся.
Приложение на React Native запускается на Android и iOS.
Так как основная идея RN это использовать JS для написания приложения, то от нее и будем отталкиваться.
Все исполняется в JS потоке и через мост дергаются OEM виджеты — то однозначно будет лагать.
Но если использовать движки и/или либы для написания игр — то опять вопрос к передаче данных между JS потоком и движком.
А если убрать JS поток — то это уже и не React Native вовсе.
Метод build вызывается каждый раз при setState.
Внутренние методы тоже. Поэтому _weNeedItOnlyOnce вызовется еще раз.
Если обернуть const вызов в функцию — он тоже вызовется еще раз.
Но не сам виджет — он const.
Если const убрать — то будет следующее поведение:
Вариант с функцией.
1) Вызывается функция -> создается виджет -> создается RenderObject и Element.
2) Обновляем State.
3) Вызывается функция -> создается виджет -> НЕ создается RenderObject и Element, а используются те же самые.
Вариант с виджетом:
1) Создается виджет -> создается RenderObject и Element.
2) Обновляем State.
3) Создается виджет -> НЕ создается RenderObject и Element, а используются те же самые.
В обоих случаях новый экземпляр виджета и новый экземпляр BuildContext.
Если const виджет возвращать из функции, то виджет создастся 1 раз и более не пересоздастся.
В обоих случаях одинаковое поведение контекстов.
И виджеты с состоянием ведут себя также.
И const тоже.
Я пытался придраться и найти разницу, но не нашел.
Ткните меня носом — “Вот смотри код и тут разница“, а так что-то непонятно. На словах нельзя, а на деле нет разницы.
Я, безусловно, могу ошибаться и буду рад, если мне укажут (с пруфами) что я не прав.