Я был не прав по поводу useEffect… документация React тоже?

preview_player
Показать описание
В данном видео я расскажу, как я долго время ошибался в вопросе того, когда хук вызывается useEffect в React. Изначально планировалось сделать небольшое видео с объяснением своей ошибки, но результаты примеров показали мне то, что и в документации все объясняется тоже не совсем верно.

Discussion о синхронном react 18:

Issues о синхронности useEffect:

Видео про ref callbacks:

Telegram канал:

Github с примерами кода из видео:

Таймкоды:
00:00-01:45 - В чем заключалась моя ошибка
01:45-03:40 - Где говорится о синхронном useEffect
03:40-04:22 - Сетап для примеров
04:22-06:05 - Код примера с user event
06:05-08:37 - Логи примера с user event
08:37-09:17 - Код примера с обновлением вне React
09:17-13:27 - Логи примера с обновлением вне React
13:27-15:31 - Код примера с реф колбэками
15:31-21:26 - Логи примера с реф колбэками
21:26-22:04 - Код примера с вложенным useEffect
22:04-24:21 - Логи примера с вложенным useEffect
24:21-25:53 - issues в GitHub на данную тему
25:53-27:04 - Выводы из урока и заключение
Рекомендации по теме
Комментарии
Автор

После просмотра данного видео заметил пару недочетов и ошибок:

На 17:32 — “Макротаски before/after effect”, а не “микротаски”.
На 19:09 — “Синхронным”, вместо “асинхронным”.

Также в конце видео я забыл показать, как будет работать обновление внутри useEffect.

*Mount:*
render
before effect microtask
after effect microtask
before effect macrotask
after effect macrotask
trigger update effect
effect
render
effect
before update microtask
after update microtask
before effect microtask
after effect microtask
before update macrotask
after update macrotask
before effect macrotask
after effect macrotask

*Update:*
render
before effect microtask
after effect microtask
before effect macrotask
after effect macrotask
trigger update effect
render
effect
before update microtask
after update microtask
before effect microtask
after effect microtask
before update macrotask
after update macrotask
before effect macrotask
after effect macrotask

Как можно увидеть по логам вложенные обновления внутри useEffect тоже были синхронными, что выглядит очень интересно.

ayub_begimkulov
Автор

В большинстве случаев поведение не важно, но все же стоит знать, если что пойдет не по сценарию и нужно понять причину. Спасибо.

YuryGoltsman
Автор

Получается рендер асинхронный и является макротаской?

akerkh
Автор

Я не успеваю ничего.... Как Вы успеваете??? 😅

WebDev_
Автор

Получается, мы уже больше года пишем с таким повелением, и никто ничего не заметил? Видимо, это вовсе не breaking change был

grenadier
Автор

Господи, где у этого видео замедление видео 😅

РусланПолянский-хб
Автор

Давай видосы не по реакту, реакт сдохнет, js останется

rusfungame