Тёмный

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

Веб-разработка - DevMagazine
Подписаться 9 тыс.
Просмотров 8 тыс.
50% 1

#ReactJS #react
Полезный Сайт О Разработке 👉 it-dev-journal.ru
В этом выпуске рассматриваем react хук useImperativeHandle и forwardRef, сравниваем хуки useImperativeHandle и useRef.
📃 Исходный код: t.me/devmagazinechannel/76
#devmagazine #devmagazinechannel
Мы в соцсетях:
☕ 💻 Telegram: t.me/devmagazinechannel
☕ 💻 Twitter: / _devmagazine
☕ 💻 GitHub: github.com/vadimkorr
☕ 💻 Medium: / devmagazine
Поддержать канал: www.donationalerts.com/r/devm...

Опубликовано:

 

6 апр 2021

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 32   
@DevMagazineChannel
@DevMagazineChannel Год назад
Еще больше полезного о React 👉 it-dev-journal.ru/tags/react
@vladimirworka8524
@vladimirworka8524 3 года назад
Не совсем понятно зачем этот хук, если с помощью forwardRef и без хука можно ref на DOMElement прокинуть вверх.
@Bnepeg3agpoT
@Bnepeg3agpoT 2 года назад
Отвечаю спустя год, но может комментарий поможет кому-то. У меня был кейс с двумя рефами: одна пришла от родителя через forwardRef, другая создаётся внутри через useRef. В итоге получается что нужно в компонент передать две рефы, но ref принимает только одну. Здесь на помощь приходит useImperativeHandle. В компонент прокидывается внутренний реф, а родителю отдаётся весь веф или то что нужно через useImperativeHandle
@alexeysvetlenko2217
@alexeysvetlenko2217 2 месяца назад
@@Bnepeg3agpoT Правильней был бы ответ такой: useImperativeHandle нужен для того, чтобы с родительского компонента вызывать функции расположенные в дочерних элементах.
@RamaRama-qv3jo
@RamaRama-qv3jo 25 дней назад
@@Bnepeg3agpoT Есть более элегантное решение, через паттерн custom ref prop.
@oygemor
@oygemor 3 года назад
Большое спасибо. То, что надо. Добавляет понимания в работе с кастомными компонентами. У "популярных" рассказчиков обычно все по-верхушкам и для вау эффекта. В глубь мало кто копает. Спасибо
@Zloy_jid
@Zloy_jid Год назад
Чел, огромное спасибо за референс, пол дня потратил, чтобы понять что это за фигня, зачем она нужна и почему я должен это знать)))))Кажется это вообще единственное упоминание useImperativeHandle в ру сегменте интернета! Подписка, лайк, ну и по-ходу мне придется у тебя посмотреть всё))))))
@romko-romario
@romko-romario 2 года назад
Благодарю, отличное объяснение. Очень помогло разобраться в теме!
@victormog
@victormog 3 года назад
Очень полезно и понятно!
@user-rn3et9eh5x
@user-rn3et9eh5x 2 года назад
Спасибо тебе большое за качественный, простой и доступный материал!
@DevMagazineChannel
@DevMagazineChannel 2 года назад
Спасибо!)
@paveltretyakov7027
@paveltretyakov7027 2 года назад
Без воды. Благодарю
@dmitrykarpovich186
@dmitrykarpovich186 2 года назад
Спасибо за пояснение, очень доступно и локанично пояснил)
@maksimsh6004
@maksimsh6004 3 года назад
Что-то я не совсем вкуриваю, `useImperativeHandle` нужен для того, чтобы прокинуть нужные значения в приходящий `ref`. Тогда возникает только один вопрос: Зачем? Если ref - это ссылка на объект, то значит мы можем его и так изменить. Даже если предположить, что нужно закешировать объект, то куда понятнее использовать useMemo. ```jsx ref.current = useMemo(() => ({ focus: () => { inputElement.current.focus() } }), []) ```
@user-cn4zh7jy4s
@user-cn4zh7jy4s Год назад
четко и по делу. Спасибо
@label5
@label5 Год назад
Совсем не раскрыт смысл хука. С первого взгляда, по видео или документации может сложится впечатление что он нужен для манипуляции рефами внутри компонента. Но на самом деле он создает реф, который будет присвоен в свойство ref CustomInput. Звучит немного сложно, но попробую объяснить. Например если мы напишем такой код: useImperativeHandle(ref, () => ({ log: () => console.log('Hello world') })); То тогда в ref CustomInput будет содержать метод log(), при вызове которого в консоле отобразиться "Hello world".
@habalgarmin
@habalgarmin 2 года назад
Полезное видео, useImperativeHandle пригодился мне при работе с таблицой ag-grid, там в ячейки нужно было пробросить кастомный инпут.
@user-nz5kf6jj4o
@user-nz5kf6jj4o 2 года назад
В конце видео вы говорите что можно для скрола применять, у вас где используется useImperativeHandle scrollIntoView для скрола к елементу и это в useEffect? Спасибо.
@albertrain7093
@albertrain7093 2 года назад
label с input-ом связываются через id. Так что в CustomInput, в htmlFor, нужно передавать id а не label. Спасибо :)
@DevMagazineChannel
@DevMagazineChannel 2 года назад
да, спасибо!)
@ivankrupskyi1163
@ivankrupskyi1163 3 года назад
Ты молодец, продолжай в том же дуже. Подписался! Кстати преподавать это очень полезно в первую очередь для преподавателя. Это очень круто для саморазвития!
@tontontonic
@tontontonic 10 месяцев назад
разве это все не заработает просто с форвард реф? без юзапртивхэндл вешаешь реф на кастомный кмпнент там принимаешь его после пропсов в фрврдреф и передаешь на тег инпут в родителе жмякаешь фокус и все или не?
@TwilingWay
@TwilingWay 3 года назад
А чего мой коммент затерли? Мне нравится, то что вы рассказываете на своем канале. Я спрашиваю почему мы не делаем просто проброску пропса сразу в input ref={ref}? можете пояснить чем ваш способ лучше и когда его стоит использовать?
@DevMagazineChannel
@DevMagazineChannel 3 года назад
не затерли) я видел ваш комент в уведомлениях и на почте, под видео его уже не было... Рефы через пропы пробрасывать можно, особенно это будет полезно если в компоненте множество элементов. Хотя, на самом деле, с useImperativeHandle тоже можно дать возможность работы с несколькими элементами... В этих двух подходах будет отличаться API кастомного компонента. А в видео я просто хотел показать такой use case на сравнении с рефом, т.к. useImperativeHandle не совсем очевидный хук, его сложнее понять в отличие от, например, useEffect или useContext.
@TwilingWay
@TwilingWay 3 года назад
@@DevMagazineChannel Спасибо
@AndreyHohutkin
@AndreyHohutkin 2 года назад
Показан только пример использования, как и в стандартной документации. Ни слова о том, как он работает и почему. useImperativeHandle связывает параметр ref с возвращаемым объектом, подставляя его в ref.current на этапе выполнения. А forwareRef предотвращает связывание ref с корневым элементом компоненты, ожидая выполнения useImperativeHandle.
@indigosay
@indigosay 3 года назад
у Вью баги и мало библиотек сторонних, у Свелт нет авторитета, поддержки корпораций и библиотек сторонних нет от слова вообще, Реакт сложнее, но других недостатков нет. Пожалуй, если я пойду работать то только на Реакт. Но свои проекты пишу на шаблонизаторах и чистом js, больше свободы.
@user-zs7kr6yp2s
@user-zs7kr6yp2s 3 года назад
Больше свободы, больше гавнокода
@habalgarmin
@habalgarmin 2 года назад
еще у Vue 3 насколько мне известно нет до сих пор нормальной поддержки typeScript в шаблонах, а у реакта есть.
@indigosay
@indigosay 2 года назад
@@habalgarmin руки чешутся пойти работать Реакт-разработчиком, но также есть цель сделать свой проект образовательный) Решил год посвятить его созданию)
@Armas0n
@Armas0n 2 года назад
ты сам с собой разговариваешь?
@Volodymyr-vq5fm
@Volodymyr-vq5fm 8 дней назад
@@Armas0n мысли вслух
Далее
React 23: forwardRef
9:50
Просмотров 9 тыс.
Never Forget React forwardRef Again
9:33
Просмотров 14 тыс.
Docker за 20 минут
21:42
Просмотров 63 тыс.
Learn React Hooks: useRef - Simply Explained!
12:42
Просмотров 81 тыс.
React useRef and forwardRef in depth
10:32
Просмотров 24 тыс.
React 17: Хук useContext
18:31
Просмотров 11 тыс.