какое значение получит этот реф в первый раз?
потому что хранит прошлое состояние overflow (до смены строкой ниже) первое значение будет то, которое уже установлено у body на момент маунтинга
а для чего запоминать это состояние? почему просто не сделать что-то вроде onMounted(() => { document.body.style.overflow = 'hidden'; }) onBeforeUnmount(() => { document.body.style.overflow = 'auto'; })
возможно, автору очень хотелось предусмотреть кейс, когда изначально overflow стоит отличный от auto, но вероятность этого стремится к нулю, поэтому я бы тоже сделал так, как ты написал ну и даже если все равно очень хочется сохранить начальное состояние, то для этого не нужно создавать отдельную переменную и делать ее рефом onMounted(() => { const { overflow } = document.body.style; document.body.style.overflow = 'hidden'; onBeforeUnmount(() => document.body.style.overflow = overflow); });
не знал что онБефорАнмаунт можно внутри онМаунтед написать, разве это не приведет к инициализации onBeforeUnmount каждый раз когда будет появляться компонент?
так компонент и маунтится только 1 раз, поэтому при маунте и регистрируется коллбэк на анмаунт, который тоже вызовется только 1 раз
Там в комментариях написано для чего он это писал Наверняка не просто так, раз сделал
нажал на кнопку => маунтится компонент => вижу модалку нажал на крестик => анмаунтится компонент => пропала модалка как это маунтится один раз?
второй раз будет маунтиться новый экземпляр
так вот в твоем примере он и смаунтился 1 раз, второго нет если ты нажмешь еще раз на кнопку, то будет создан полностью новый интсанс компонента, у него будет заново вызван маунтед и заново зарегистрирован коллбэк (единственный, т.к. инстанс новый)
ааа теперь понял) гениально, спасибо за пояснение!)
Обсуждают сегодня