Еще одна кстати интересная вещь в React 18 это батчинг
Для начала нужно толком понять что такое батчинг - грубо говоря это объдинение нескольких ненужных ререндеров в один. То есть когда у вас каскад изменений стейтов в функции, то без батчинга, на каждое изменение будет ререндер. А с батчингом реакт понимает что у него много изменений и сделает ререндер только один раз
Батчинг появился в React еще в 16 версии, но он работал в синхронном формате. То есть если вы в промисе делали какие-то обновления это вызывало еще один перерендер. Сейчас уже в 18 версии батчинг работает везде, то есть мы делаем функцию, которая содержит в себе множество изменений стейтов (включая и в асинхронном формате) и рендер по итогу будет один
➖ А если мне надо чтобы было несколько перерендеров ?
В таком случае есть такая штука как flushSync. Она уже позволяет выделить взятое изменение в отдельный ререндер.
➖ А если у меня не 18 версии React ?
В таком случае есть другая штука это unstable_batchedUpdates. Обернув в нее наше асинхронное изменение, мы увидим что батчинг будет работать исправно
🔥 Накидайте тут ваших огоньков 🔥
Для начала нужно толком понять что такое батчинг - грубо говоря это объдинение нескольких ненужных ререндеров в один. То есть когда у вас каскад изменений стейтов в функции, то без батчинга, на каждое изменение будет ререндер. А с батчингом реакт понимает что у него много изменений и сделает ререндер только один раз
Батчинг появился в React еще в 16 версии, но он работал в синхронном формате. То есть если вы в промисе делали какие-то обновления это вызывало еще один перерендер. Сейчас уже в 18 версии батчинг работает везде, то есть мы делаем функцию, которая содержит в себе множество изменений стейтов (включая и в асинхронном формате) и рендер по итогу будет один
В таком случае есть такая штука как flushSync. Она уже позволяет выделить взятое изменение в отдельный ререндер.
В таком случае есть другая штука это unstable_batchedUpdates. Обернув в нее наше асинхронное изменение, мы увидим что батчинг будет работать исправно