Привет, спасибо за твой труд, очень актуальная тема. В продолжении, может порассуждаем на тему "следует ли оборачивать ВСЕ функции передаваемые в качестве пропсов в useCallback?"
мы не планируем останавливаться) главное поддерживайте проект разными способами) лайк / репост / обсудите с коллегами / поделитесь в соц сетях / patreon) Все это нас очень мотивирует продолжать)
Я сейчас еще пере тестировал. Массив у меня приходил, когда я передавал 2 и более элемента в children. Поэтому в видео я немного видимо преврал. В случае 1 элемента это объект, а в случае нескольких children возвращает массив.
я немного ввел в заблуждение с массивом. Это не совсем правда. Я готовясь к докладу все пере тестировал. Оказалось, что если children 1, то он возвращает обхект, а если 2 и более то возвращает массив. А заставляется рендерится MemoWrapper, только по причине, того что React.createElement() создает новый объект при каждом рендере.
@@it-sin9k а Если каждому компоненту присвоить Key , будет ли это не массив а Object с ключом = Key ? Смотрел доклад, что с ключами меняется структура данных , и сравнение идет не по индексам массива , а по ключам и значениям
Идея в следующем MemoWrapper это компонент, который получает props children, и этот children ни что иное как массив. Он всегда массив. Он даже переводится как "дети", т.е. он назван ни child, а children. Мы же можем передать туда больше детей:
Таким образом MemoWrapper получает в качестве children следующий массив [MemoChildWrapper, OneMoreComponent]. И получается даже если внутри этого массива, ссылки на компоненты MemoChildWrapper и OneMoreComponent останутся прежними, то сам массив, в котором лежат эти ссылки будет, будет новым (так реализован React, что массив всегда будет новым). А memo сравнивает по принципу shallowEqual, т.е. он проверит, что ссылка на массив изменилась и не важно, что контент в массиве остался прежним Надеюсь хоть немного стало понятнее ЖВ
@@it-sin9k многие думают что реакт это магический чёрный ящик. А по факту реакт просто вызывает каскадно все функции-компоненты вниз по дереву до последнего чилдрена, где пропсы это параметры функции. Запись это то же самое что {Foo({value: “1”})}. Можешь сам проверить)
Тогда интересно, а почему бы не сделать мемо по умолчанию, но с возможностью отключать эту проверку где это необходимо (где shallowEqual всегда будет возвращать false) 🧐
я думаю, что такое сделать можно. Но есть пара нюансов. Первое такой подход уже есть, и ресурсы можно направить на что-то другое, что принесет больше профита. А с другой стороны. Это как VSCode и Jetbrains продукт. В одном ты добавляешь плагины, чтобы все настроить. А в другом, ты зачастую отключаешь много чего, чтобы работало как ты ожидаешь. Видимо подход подключать плагины им больше нравится)
Привет, спасибо за твой труд, очень актуальная тема. В продолжении, может порассуждаем на тему "следует ли оборачивать ВСЕ функции передаваемые в качестве пропсов в useCallback?"
спасибо!)
данное рассуждение уже есть на канале в видео "что вы знаете о useCallback"
ruclips.net/video/2Wp7QPTkpms/видео.html
Бро, у тебя отличный контент! Не останавливайся плиз =)
мы не планируем останавливаться) главное поддерживайте проект разными способами)
лайк / репост / обсудите с коллегами / поделитесь в соц сетях / patreon)
Все это нас очень мотивирует продолжать)
@@it-sin9k коллегам отправил уже)
спасибо!)
Прекрасно !!!
Очень очень качественно !)
спасибо!) похвала это всегда приятно после публикации))
Блин, а я даже не задумывался об этом. Спасибо ^^
Для этого и существует, этот канал) чтобы обратить внимание на такие вопросы)
какой крутой блог у Эриксена. странно, что раньше на него не попадал. спасибо!
we are connecting people)
5:45 вот тут очень запутанно кто будет а кто не будет, и почему.
Наверное стоило бы сделать zoom-in и показать почему.
возможно :) я надеялся, то что голосом явно проговорил, будет достаточно)
@@it-sin9k ты говоришь - "MemoChildren всегда будет новым инстансом массива". Какого массива?
Я сейчас еще пере тестировал. Массив у меня приходил, когда я передавал 2 и более элемента в children. Поэтому в видео я немного видимо преврал. В случае 1 элемента это объект, а в случае нескольких children возвращает массив.
канал на котором не возможно поставить дизлайк
серьезное заявление)) спасибо!)
Крутецкий уникальный контент на русском ютубе !
спасибо!) не забудьте подписаться на выход новых выпуском (нажать на колокольчик) :)
контент выходит не часто, но никакого спама)
Годнота
Спасибо большое 💪
рады стараться)
Врапеер перестает перерендериваться , если завернуть вызов компонента с пропсами в useMemo() ))
const memoChildren = useMemo(()=>,[])
{memoChildren}
да, абсолютно верно. Всегда можно выкрутиться)
Не совсем уловил суть здесь и как это решает ишью с озвученным в видео новым инстансом массива для children.
я немного ввел в заблуждение с массивом. Это не совсем правда. Я готовясь к докладу все пере тестировал. Оказалось, что если children 1, то он возвращает обхект, а если 2 и более то возвращает массив. А заставляется рендерится MemoWrapper, только по причине, того что React.createElement() создает новый объект при каждом рендере.
@@it-sin9k а Если каждому компоненту присвоить Key , будет ли это не массив а Object с ключом = Key ?
Смотрел доклад, что с ключами меняется структура данных , и сравнение идет не по индексам массива , а по ключам и значениям
Думаю не будет. Если сделать console.log любого компонента, то вы увидите, что key это свойство внутри узла.
Не совсем понял этот момент
Почему MemoWrapper будет перерендериваться, раз он Memo? Я не совсем понял фразу про 'инстанс массива'. Синяк, помоги плиз разобраться)
Идея в следующем MemoWrapper это компонент, который получает props children, и этот children ни что иное как массив. Он всегда массив. Он даже переводится как "дети", т.е. он назван ни child, а children. Мы же можем передать туда больше детей:
Таким образом MemoWrapper получает в качестве children следующий массив [MemoChildWrapper, OneMoreComponent]. И получается даже если внутри этого массива, ссылки на компоненты MemoChildWrapper и OneMoreComponent останутся прежними, то сам массив, в котором лежат эти ссылки будет, будет новым (так реализован React, что массив всегда будет новым). А memo сравнивает по принципу shallowEqual, т.е. он проверит, что ссылка на массив изменилась и не важно, что контент в массиве остался прежним
Надеюсь хоть немного стало понятнее ЖВ
@@it-sin9k Спасибо большое, за развернутый ответ) Стало более понятно
@@it-sin9k блин тот же вопрос был, но как круто разьяснил))
@@orucqarayev4759 Спасибо)
@@it-sin9k , ты топ!) Я тоже сначала не понял, сейчас вопросы отпали)
Остается другой вопрос: зачем реакт ререндерит компонент без пропсов и чилдренов, если перерендерился родитель? Там даже сравнивать нечего же.
Хороший вопрос :)
@@it-sin9k многие думают что реакт это магический чёрный ящик. А по факту реакт просто вызывает каскадно все функции-компоненты вниз по дереву до последнего чилдрена, где пропсы это параметры функции. Запись это то же самое что {Foo({value: “1”})}. Можешь сам проверить)
Звучит очень реалистично) вот потихоньку ковыряюсь в исходниках и делюсь на канале к чему пришел)
@@it-sin9k серия видосов очень крутая. Хотелось бы ещё про useState видос)
там исходники сложнее) тяжелее это рассказать, но я постараюсь вернуться к этому)
автор этого поста ёмаё. Это сам Марк Эриксон)
:D
@@it-sin9k можешь кстати сделать видео на основе его статей. Он рендеринг круто объясняет там, например
4:31 так ишью закрыто ж🙂
странно получилось))) я видимо когда первый раз смотрел, issue было еще открыто или почему я так решил, не помню уже))
"Ты заявляешь такие есерьезные вещи. Но ты делаешь это без ссылок" - по-моему такое было в крестном отце. Там еще кого-то за это убили
ахахахха))) надеюсь у нас все выживут))
@@it-sin9k выжили?
@@romandeveloper7720 нас двое и мы по прежнему публикуем новые видео) пока все окей)
и в 18 не сбылось
ага)
Тогда интересно, а почему бы не сделать мемо по умолчанию, но с возможностью отключать эту проверку где это необходимо (где shallowEqual всегда будет возвращать false) 🧐
я думаю, что такое сделать можно. Но есть пара нюансов. Первое такой подход уже есть, и ресурсы можно направить на что-то другое, что принесет больше профита. А с другой стороны. Это как VSCode и Jetbrains продукт. В одном ты добавляешь плагины, чтобы все настроить. А в другом, ты зачастую отключаешь много чего, чтобы работало как ты ожидаешь. Видимо подход подключать плагины им больше нравится)
@@it-sin9k исчерпывающе, спасибо )