Комментарии 16
Такой подход предотвратит создание новых функций каждый раз и повысит шансы, что потомки не будут обновляться зря.
Стрелочная функция передаваемая аргументом в useCallback как создавалась при каждом рендере так и будет создаваться. Неизменным будет только возвращаемое хуком значение, при условии, что зависимости не изменились.
Поэтому можно использовать mobx и action.bound =)
Это верное наблюдение, но важно различать создание функции и сохранение одной и той же ссылки. useCallback
и нужен именно для последнего — чтобы ссылка оставалась стабильной, пока не изменятся зависимости.
Именно это написано в моем комментарии и не совсем это написанно в цитируемом мной абзаце.
Да, важно различать. Но вы пишете "Такой подход предотвратит создание новых функций". И вам, как раз указывают на ошибку, что такой подход ВООБЩЕ НИКАК не предотвратить создание новых функций.
useCallback(()=>{}, []) - тут создается новая стрелочная функция (аргумент для useCallback), дальше дело техники, относительно, результата, но именно тут ВООБЩЕ НЕТ никакой оптимизации, касающиеся вашего пункта "нагружает сборщик мусора из-за множества краткоживущих объектов-функций". Функции в вашем "подходе", как создавались, так и создаются, в том же количестве и с той же частотой.
Вы и @Galy4a правы.
Фраза про пересоздание функций не корректна, её стоило бы сформулировать как "передает всегда одну и ту же ссылку на функцию, если [deps] не менялся."
В примере useCallback(()=>{}, [])
смысла никакого нет, это подсвечено в блоке - Обращайте внимание, когда useMemo и useCallback используются для простых вычислений.
Спасибо за вашу внимательность)
Статья хорошая и полезная. Но есть маленький вопрос, а разве мост bridge не заменили на JSI в 0.72 по умолчанию?
React Native тормозит?
Отличный, кстати говоря, выбор для главного меню пуск в ОС...
Уже отправил статью МикроМягким :)
Ну кст, после того, как RN переехал на jsi он намного больше может, но конечно все сильно зависит от рук и качества зананий))))
Хотя чисто по производительности, для меня flutter все еще в лидерах. (kotlin multiplatform не учитываем)
Вот хороший пример того, как стоит использовать
StyleSheet.create
Это как раз плохой пример использования StyleSheet.create
, так как стили будут создаваться либо на каждый рендер, либо с useMemo
на каждое монтирование каждого элемента. То есть если в списке 500 ячеек, то 500 раз.
В своей статье я писал, как правильно работать со стилями для лучшей производительности.
React Native тормозит? Проверь эти 8 узких мест в производительности, прежде чем винить фреймворк [ЧЕК-ЛИСТ]