Продвинутая мемоизация с 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 жыл бұрын
Спасибо!
#4: React Hooks - useMemo + React.memo
25:38
Archakov Blog
Рет қаралды 72 М.
She's very CREATIVE💡💦 #camping #survival #bushcraft #outdoors #lifehack
00:26
Бенчик, пора купаться! 🛁 #бенчик #арти #симбочка
00:34
Симбочка Пимпочка
Рет қаралды 3,2 МЛН
#36 Погружаемся в useRef  - ReactJS Полный курс
19:33
Евгений Паромов | Front-end
Рет қаралды 6 М.
Зачем на самом деле нужен хук useCallback
8:33
Михаил Непомнящий
Рет қаралды 43 М.
JWT авторизация. Основы JWT - механизма.
6:45
Хочу вАйти
Рет қаралды 12 М.
Учимся использовать useMemo, useCallback и React.memo | подводные камни | JavaScript, React
37:25
Елена Литвинова — Искусство Веб-разработки 🛸
Рет қаралды 25 М.
Speed Up Your React Apps With Code Splitting
16:50
Web Dev Simplified
Рет қаралды 386 М.
ВОЗВРАЩЕНИЕ! ГДЕ БЫЛ? ДАЛЬНЕЙШИЕ ПЛАНЫ
14:39
Learn React Hooks: useRef - Simply Explained!
12:42
Cosden Solutions
Рет қаралды 105 М.
7 Лет Опыта в IT | Что я Понял?
19:56
Vlad Mishustin
Рет қаралды 192 М.