Самые загадочные хуки - useImperativeHandle и forwardRef

Sdílet
Vložit
  • čas přidán 7. 09. 2024
  • #ReactJS #react
    Полезный Сайт О Разработке 👉 it-dev-journal.ru
    В этом выпуске рассматриваем react хук useImperativeHandle и forwardRef, сравниваем хуки useImperativeHandle и useRef.
    📃 Исходный код: t.me/devmagazi...
    #devmagazine #devmagazinechannel
    Мы в соцсетях:
    ☕ 💻 Telegram: t.me/devmagazi...
    ☕ 💻 Twitter: / _devmagazine
    ☕ 💻 GitHub: github.com/vad...
    ☕ 💻 Medium: / devmagazine
    Поддержать канал: www.donational...

Komentáře • 32

  • @DevMagazineChannel
    @DevMagazineChannel  Před rokem +2

    Еще больше полезного о React 👉 it-dev-journal.ru/tags/react

  • @vladimirworka8524
    @vladimirworka8524 Před 3 lety +15

    Не совсем понятно зачем этот хук, если с помощью forwardRef и без хука можно ref на DOMElement прокинуть вверх.

    • @Bnepeg3agpoT
      @Bnepeg3agpoT Před 2 lety +4

      Отвечаю спустя год, но может комментарий поможет кому-то.
      У меня был кейс с двумя рефами: одна пришла от родителя через forwardRef, другая создаётся внутри через useRef. В итоге получается что нужно в компонент передать две рефы, но ref принимает только одну. Здесь на помощь приходит useImperativeHandle. В компонент прокидывается внутренний реф, а родителю отдаётся весь веф или то что нужно через useImperativeHandle

    • @alexeysvetlenko2217
      @alexeysvetlenko2217 Před 5 měsíci

      @@Bnepeg3agpoT Правильней был бы ответ такой: useImperativeHandle нужен для того, чтобы с родительского компонента вызывать функции расположенные в дочерних элементах.

    • @RamaRama-qv3jo
      @RamaRama-qv3jo Před 3 měsíci

      @@Bnepeg3agpoT Есть более элегантное решение, через паттерн custom ref prop.

  • @Zloy_jid
    @Zloy_jid Před rokem +3

    Чел, огромное спасибо за референс, пол дня потратил, чтобы понять что это за фигня, зачем она нужна и почему я должен это знать)))))Кажется это вообще единственное упоминание useImperativeHandle в ру сегменте интернета! Подписка, лайк, ну и по-ходу мне придется у тебя посмотреть всё))))))

  • @oygemor
    @oygemor Před 3 lety +5

    Большое спасибо. То, что надо. Добавляет понимания в работе с кастомными компонентами. У "популярных" рассказчиков обычно все по-верхушкам и для вау эффекта. В глубь мало кто копает. Спасибо

  • @maksimsh6004
    @maksimsh6004 Před 3 lety +1

    Что-то я не совсем вкуриваю, `useImperativeHandle` нужен для того, чтобы прокинуть нужные значения в приходящий `ref`. Тогда возникает только один вопрос: Зачем? Если ref - это ссылка на объект, то значит мы можем его и так изменить. Даже если предположить, что нужно закешировать объект, то куда понятнее использовать useMemo.
    ```jsx
    ref.current = useMemo(() => ({
    focus: () => {
    inputElement.current.focus()
    }
    }), [])
    ```

  • @label5
    @label5 Před 2 lety +2

    Совсем не раскрыт смысл хука. С первого взгляда, по видео или документации может сложится впечатление что он нужен для манипуляции рефами внутри компонента. Но на самом деле он создает реф, который будет присвоен в свойство ref CustomInput. Звучит немного сложно, но попробую объяснить.
    Например если мы напишем такой код:
    useImperativeHandle(ref, () => ({ log: () => console.log('Hello world') }));
    То тогда в ref CustomInput будет содержать метод log(), при вызове которого в консоле отобразиться "Hello world".

  • @user-rn3et9eh5x
    @user-rn3et9eh5x Před 3 lety +2

    Спасибо тебе большое за качественный, простой и доступный материал!

  • @romko-romario
    @romko-romario Před 3 lety +2

    Благодарю, отличное объяснение. Очень помогло разобраться в теме!

  • @albertrain7093
    @albertrain7093 Před 2 lety +1

    label с input-ом связываются через id. Так что в CustomInput, в htmlFor, нужно передавать id а не label. Спасибо :)

  • @paveltretyakov7027
    @paveltretyakov7027 Před 2 lety

    Без воды. Благодарю

  • @AndreyHohutkin
    @AndreyHohutkin Před 2 lety +1

    Показан только пример использования, как и в стандартной документации. Ни слова о том, как он работает и почему.
    useImperativeHandle связывает параметр ref с возвращаемым объектом, подставляя его в ref.current на этапе выполнения. А forwareRef предотвращает связывание ref с корневым элементом компоненты, ожидая выполнения useImperativeHandle.

  • @tontontonic
    @tontontonic Před rokem

    разве это все не заработает просто с форвард реф?
    без юзапртивхэндл
    вешаешь реф на кастомный кмпнент
    там принимаешь его после пропсов в фрврдреф и передаешь на тег инпут
    в родителе жмякаешь фокус и все
    или не?

  • @habalgarmin
    @habalgarmin Před 3 lety

    Полезное видео, useImperativeHandle пригодился мне при работе с таблицой ag-grid, там в ячейки нужно было пробросить кастомный инпут.

  • @victormog
    @victormog Před 3 lety +2

    Очень полезно и понятно!

  • @dmitrykarpovich186
    @dmitrykarpovich186 Před 2 lety

    Спасибо за пояснение, очень доступно и локанично пояснил)

  • @TwilingWay
    @TwilingWay Před 3 lety +1

    А чего мой коммент затерли? Мне нравится, то что вы рассказываете на своем канале. Я спрашиваю почему мы не делаем просто проброску пропса сразу в input ref={ref}? можете пояснить чем ваш способ лучше и когда его стоит использовать?

    • @DevMagazineChannel
      @DevMagazineChannel  Před 3 lety +1

      не затерли) я видел ваш комент в уведомлениях и на почте, под видео его уже не было...
      Рефы через пропы пробрасывать можно, особенно это будет полезно если в компоненте множество элементов. Хотя, на самом деле, с useImperativeHandle тоже можно дать возможность работы с несколькими элементами... В этих двух подходах будет отличаться API кастомного компонента.
      А в видео я просто хотел показать такой use case на сравнении с рефом, т.к. useImperativeHandle не совсем очевидный хук, его сложнее понять в отличие от, например, useEffect или useContext.

    • @TwilingWay
      @TwilingWay Před 3 lety

      @@DevMagazineChannel Спасибо

  • @user-nz5kf6jj4o
    @user-nz5kf6jj4o Před 3 lety

    В конце видео вы говорите что можно для скрола применять, у вас где используется useImperativeHandle scrollIntoView для скрола к елементу и это в useEffect? Спасибо.

  • @user-cn4zh7jy4s
    @user-cn4zh7jy4s Před 2 lety

    четко и по делу. Спасибо

  • @ivankrupskyi1163
    @ivankrupskyi1163 Před 3 lety

    Ты молодец, продолжай в том же дуже. Подписался!
    Кстати преподавать это очень полезно в первую очередь для преподавателя.
    Это очень круто для саморазвития!

  • @indigosay
    @indigosay Před 3 lety

    у Вью баги и мало библиотек сторонних, у Свелт нет авторитета, поддержки корпораций и библиотек сторонних нет от слова вообще, Реакт сложнее, но других недостатков нет. Пожалуй, если я пойду работать то только на Реакт. Но свои проекты пишу на шаблонизаторах и чистом js, больше свободы.

    • @user-zs7kr6yp2s
      @user-zs7kr6yp2s Před 3 lety +1

      Больше свободы, больше гавнокода

    • @habalgarmin
      @habalgarmin Před 3 lety

      еще у Vue 3 насколько мне известно нет до сих пор нормальной поддержки typeScript в шаблонах, а у реакта есть.

    • @indigosay
      @indigosay Před 3 lety

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

    • @Armas0n
      @Armas0n Před 2 lety

      ты сам с собой разговариваешь?

    • @Volodymyr-vq5fm
      @Volodymyr-vq5fm Před 2 měsíci

      @@Armas0n мысли вслух