Станет ли memo() дэфолтным поведением реакт компонента?

Поделиться
HTML-код
  • Опубликовано: 18 окт 2024

Комментарии • 59

  • @Dmitriy-bq2xh
    @Dmitriy-bq2xh 3 года назад +7

    Привет, спасибо за твой труд, очень актуальная тема. В продолжении, может порассуждаем на тему "следует ли оборачивать ВСЕ функции передаваемые в качестве пропсов в useCallback?"

    • @it-sin9k
      @it-sin9k  3 года назад

      спасибо!)
      данное рассуждение уже есть на канале в видео "что вы знаете о useCallback"
      ruclips.net/video/2Wp7QPTkpms/видео.html

  • @MrOzziris
    @MrOzziris 3 года назад +4

    Бро, у тебя отличный контент! Не останавливайся плиз =)

    • @it-sin9k
      @it-sin9k  3 года назад

      мы не планируем останавливаться) главное поддерживайте проект разными способами)
      лайк / репост / обсудите с коллегами / поделитесь в соц сетях / patreon)
      Все это нас очень мотивирует продолжать)

    • @almazkaliyev
      @almazkaliyev 3 года назад

      @@it-sin9k коллегам отправил уже)

    • @it-sin9k
      @it-sin9k  3 года назад +1

      спасибо!)

  • @valeriipimenov4894
    @valeriipimenov4894 3 года назад +5

    Прекрасно !!!
    Очень очень качественно !)

    • @it-sin9k
      @it-sin9k  3 года назад +1

      спасибо!) похвала это всегда приятно после публикации))

  • @user-eq7fu9sd5z
    @user-eq7fu9sd5z 3 года назад +1

    Блин, а я даже не задумывался об этом. Спасибо ^^

    • @it-sin9k
      @it-sin9k  3 года назад

      Для этого и существует, этот канал) чтобы обратить внимание на такие вопросы)

  • @andreyalexandrov2067
    @andreyalexandrov2067 3 года назад

    какой крутой блог у Эриксена. странно, что раньше на него не попадал. спасибо!

    • @it-sin9k
      @it-sin9k  3 года назад +1

      we are connecting people)

  • @AbraKadabra000
    @AbraKadabra000 3 года назад +8

    5:45 вот тут очень запутанно кто будет а кто не будет, и почему.
    Наверное стоило бы сделать zoom-in и показать почему.

    • @it-sin9k
      @it-sin9k  3 года назад +1

      возможно :) я надеялся, то что голосом явно проговорил, будет достаточно)

    • @evisotskiydev
      @evisotskiydev 3 года назад

      @@it-sin9k ты говоришь - "MemoChildren всегда будет новым инстансом массива". Какого массива?

    • @it-sin9k
      @it-sin9k  3 года назад +3

      Я сейчас еще пере тестировал. Массив у меня приходил, когда я передавал 2 и более элемента в children. Поэтому в видео я немного видимо преврал. В случае 1 элемента это объект, а в случае нескольких children возвращает массив.

  • @underpog5347
    @underpog5347 3 года назад +2

    канал на котором не возможно поставить дизлайк

    • @it-sin9k
      @it-sin9k  3 года назад +1

      серьезное заявление)) спасибо!)

  • @AbraKadabra000
    @AbraKadabra000 3 года назад +1

    Крутецкий уникальный контент на русском ютубе !

    • @it-sin9k
      @it-sin9k  3 года назад +1

      спасибо!) не забудьте подписаться на выход новых выпуском (нажать на колокольчик) :)
      контент выходит не часто, но никакого спама)

  • @nikto5878
    @nikto5878 3 года назад

    Годнота

  • @muratx10
    @muratx10 3 года назад

    Спасибо большое 💪

    • @it-sin9k
      @it-sin9k  3 года назад

      рады стараться)

  • @it-coding
    @it-coding 3 года назад +4

    Врапеер перестает перерендериваться , если завернуть вызов компонента с пропсами в useMemo() ))
    const memoChildren = useMemo(()=>,[])
    {memoChildren}

    • @it-sin9k
      @it-sin9k  3 года назад

      да, абсолютно верно. Всегда можно выкрутиться)

    • @viktorsoroka4510
      @viktorsoroka4510 3 года назад

      Не совсем уловил суть здесь и как это решает ишью с озвученным в видео новым инстансом массива для children.

    • @it-sin9k
      @it-sin9k  3 года назад +1

      я немного ввел в заблуждение с массивом. Это не совсем правда. Я готовясь к докладу все пере тестировал. Оказалось, что если children 1, то он возвращает обхект, а если 2 и более то возвращает массив. А заставляется рендерится MemoWrapper, только по причине, того что React.createElement() создает новый объект при каждом рендере.

    • @it-coding
      @it-coding 3 года назад

      @@it-sin9k а Если каждому компоненту присвоить Key , будет ли это не массив а Object с ключом = Key ?
      Смотрел доклад, что с ключами меняется структура данных , и сравнение идет не по индексам массива , а по ключам и значениям

    • @it-sin9k
      @it-sin9k  3 года назад

      Думаю не будет. Если сделать console.log любого компонента, то вы увидите, что key это свойство внутри узла.

  • @AndreyEricksonGame
    @AndreyEricksonGame 3 года назад +1

    Не совсем понял этот момент

    Почему MemoWrapper будет перерендериваться, раз он Memo? Я не совсем понял фразу про 'инстанс массива'. Синяк, помоги плиз разобраться)

    • @it-sin9k
      @it-sin9k  3 года назад +6

      Идея в следующем MemoWrapper это компонент, который получает props children, и этот children ни что иное как массив. Он всегда массив. Он даже переводится как "дети", т.е. он назван ни child, а children. Мы же можем передать туда больше детей:

      Таким образом MemoWrapper получает в качестве children следующий массив [MemoChildWrapper, OneMoreComponent]. И получается даже если внутри этого массива, ссылки на компоненты MemoChildWrapper и OneMoreComponent останутся прежними, то сам массив, в котором лежат эти ссылки будет, будет новым (так реализован React, что массив всегда будет новым). А memo сравнивает по принципу shallowEqual, т.е. он проверит, что ссылка на массив изменилась и не важно, что контент в массиве остался прежним
      Надеюсь хоть немного стало понятнее ЖВ

    • @AndreyEricksonGame
      @AndreyEricksonGame 3 года назад

      @@it-sin9k Спасибо большое, за развернутый ответ) Стало более понятно

    • @orucqarayev4759
      @orucqarayev4759 Год назад

      @@it-sin9k блин тот же вопрос был, но как круто разьяснил))

    • @it-sin9k
      @it-sin9k  Год назад

      @@orucqarayev4759 Спасибо)

    • @romandeveloper7720
      @romandeveloper7720 Год назад

      @@it-sin9k , ты топ!) Я тоже сначала не понял, сейчас вопросы отпали)

  • @hyposlasher
    @hyposlasher 2 года назад +1

    Остается другой вопрос: зачем реакт ререндерит компонент без пропсов и чилдренов, если перерендерился родитель? Там даже сравнивать нечего же.

    • @it-sin9k
      @it-sin9k  2 года назад

      Хороший вопрос :)

    • @hyposlasher
      @hyposlasher 2 года назад

      @@it-sin9k многие думают что реакт это магический чёрный ящик. А по факту реакт просто вызывает каскадно все функции-компоненты вниз по дереву до последнего чилдрена, где пропсы это параметры функции. Запись это то же самое что {Foo({value: “1”})}. Можешь сам проверить)

    • @it-sin9k
      @it-sin9k  2 года назад +1

      Звучит очень реалистично) вот потихоньку ковыряюсь в исходниках и делюсь на канале к чему пришел)

    • @hyposlasher
      @hyposlasher 2 года назад

      @@it-sin9k серия видосов очень крутая. Хотелось бы ещё про useState видос)

    • @it-sin9k
      @it-sin9k  2 года назад

      там исходники сложнее) тяжелее это рассказать, но я постараюсь вернуться к этому)

  • @kinderhero8897
    @kinderhero8897 3 года назад

    автор этого поста ёмаё. Это сам Марк Эриксон)

    • @it-sin9k
      @it-sin9k  3 года назад

      :D

    • @kinderhero8897
      @kinderhero8897 3 года назад

      @@it-sin9k можешь кстати сделать видео на основе его статей. Он рендеринг круто объясняет там, например

  • @viktorsoroka4510
    @viktorsoroka4510 3 года назад

    4:31 так ишью закрыто ж🙂

    • @it-sin9k
      @it-sin9k  3 года назад

      странно получилось))) я видимо когда первый раз смотрел, issue было еще открыто или почему я так решил, не помню уже))

  • @mtyEyes
    @mtyEyes 3 года назад +4

    "Ты заявляешь такие есерьезные вещи. Но ты делаешь это без ссылок" - по-моему такое было в крестном отце. Там еще кого-то за это убили

    • @it-sin9k
      @it-sin9k  3 года назад

      ахахахха))) надеюсь у нас все выживут))

    • @romandeveloper7720
      @romandeveloper7720 Год назад

      @@it-sin9k выжили?

    • @it-sin9k
      @it-sin9k  Год назад

      @@romandeveloper7720 нас двое и мы по прежнему публикуем новые видео) пока все окей)

  • @ДаниилЧервяков-е6ц
    @ДаниилЧервяков-е6ц 2 года назад

    и в 18 не сбылось

  • @KycokFt
    @KycokFt 3 года назад

    Тогда интересно, а почему бы не сделать мемо по умолчанию, но с возможностью отключать эту проверку где это необходимо (где shallowEqual всегда будет возвращать false) 🧐

    • @it-sin9k
      @it-sin9k  3 года назад +1

      я думаю, что такое сделать можно. Но есть пара нюансов. Первое такой подход уже есть, и ресурсы можно направить на что-то другое, что принесет больше профита. А с другой стороны. Это как VSCode и Jetbrains продукт. В одном ты добавляешь плагины, чтобы все настроить. А в другом, ты зачастую отключаешь много чего, чтобы работало как ты ожидаешь. Видимо подход подключать плагины им больше нравится)

    • @KycokFt
      @KycokFt 3 года назад

      @@it-sin9k исчерпывающе, спасибо )