Продвинутая мемоизация с useRef | React Hooks - useLatest

  Рет қаралды 3,671

Ayub Begimkulov

Ayub Begimkulov

Күн бұрын

Пікірлер: 11
@grenadier4702
@grenadier4702 2 жыл бұрын
Из этой идеи можно сделать классный апгрейд для useCallback, где функция будет одна и та же, а вот используемые в ней переменные всегда актуальными function useEvent any>(event: T) { const eventRef = useRef(event); useLayoutEffect(() => { eventRef.current = event; }); return useCallback(() => { eventRef.current(); }, []); }
@ayub_begimkulov
@ayub_begimkulov 2 жыл бұрын
Да, использовал подобную технику в других видео по хукам.
@669pain
@669pain 2 жыл бұрын
В данном случае можно было просто использовать useRef и передать его в ref инпута. Тогда не понадобился бы самописный хук, useState и useCallback, а компонент получился бы на много компактнее и легче.
@ayub_begimkulov
@ayub_begimkulov 2 жыл бұрын
В данном случае да, 100%. Возможно стоило уделить этому больше внимания, но я говорю про более сложные кейсы, когда нам нужно иметь актуальное значение без прокидывания deps’ов. Хороший пример - хук useEventListener. Не хотелось бы при обновлении стейта каждый раз переподписываться на событие в useEffect. В таких случаях данный подход бывает очень полезен и можно много подобных примеров найти в библиотеках на GitHub.
@shevdev
@shevdev 2 жыл бұрын
По звуку клавиатуры сразу понял что у вас макбук аир м1 :D
@ayub_begimkulov
@ayub_begimkulov 2 жыл бұрын
Ага, он самый)
@669pain
@669pain 2 жыл бұрын
Если же все таки захотелось свойство text положить в реф, то его не нужно обновлять через эффекты. Он сохраняет ссылку на объект, следовательно в нем всегда буду актуальные данные
@ayub_begimkulov
@ayub_begimkulov 2 жыл бұрын
Возможно не так тебя понял, но да, реф можно обновлять и в onChange и в самом теле компонента - оба варианта будут рабочие. Но с данным подходом через useLatest есть один важный момент - Универсальность. В данном случае нам нужен актуальный текст инпута, а что, если нам нужны были бы какие-то данные, которые приходят из пропсов? Тогда уже не прошёл бы трюк с обновлением ref в onChange. А по поводу заворачивания в useLayoutEffect вместо обновления в теле функции - это нужно для поддержки concurrent more React. Я не стал этому выделять много внимания, но есть хорошая статья - frontarm.com/daishi-kato/use-ref-in-concurrent-mode/ Может сниму как-то видео об этом. Спасибо за фидбэк!
@669pain
@669pain 2 жыл бұрын
@@ayub_begimkulov 🤝
@raff_m_d6971
@raff_m_d6971 2 жыл бұрын
крассава
@ayub_begimkulov
@ayub_begimkulov 2 жыл бұрын
Спасибо!
Зачем на самом деле нужен хук useCallback
8:33
Михаил Непомнящий
Рет қаралды 43 М.
Когда отец одевает ребёнка @JaySharon
00:16
История одного вокалиста
Рет қаралды 14 МЛН
НИКИТА ПОДСТАВИЛ ДЖОНИ 😡
01:00
HOOOTDOGS
Рет қаралды 1,7 МЛН
Хватит всё мемоизировать! Это делает компоненты нечитаемыми
18:52
#4: React Hooks - useMemo + React.memo
25:38
Archakov Blog
Рет қаралды 72 М.
Жадные алгоритмы
11:10
про АйТи | IT Pro
Рет қаралды 9 М.
#36 Погружаемся в useRef  - ReactJS Полный курс
19:33
Евгений Паромов | Front-end
Рет қаралды 6 М.
createRef, setRef, useRef и зачем нужен current в ref
12:08
АйТи Синяк
Рет қаралды 29 М.
ВОЗВРАЩЕНИЕ! ГДЕ БЫЛ? ДАЛЬНЕЙШИЕ ПЛАНЫ
14:39
SENIOR on JUNIOR Javascript Developer interview
26:35
BELOV
Рет қаралды 319 М.
Учимся использовать useMemo, useCallback и React.memo | подводные камни | JavaScript, React
37:25
Елена Литвинова — Искусство Веб-разработки 🛸
Рет қаралды 25 М.
7 Лет Опыта в IT | Что я Понял?
19:56
Vlad Mishustin
Рет қаралды 192 М.
Клиент Apollo GraphQL для React-приложений
44:11
Михаил Непомнящий
Рет қаралды 29 М.