Я добавляю некоторый класс к элементу body
, когда Modal
открыт
const Modal = ({ ... }) => {
...
useEffect(() => {
document.body.classList.add('modal-open')
return () => document.body.classList.remove('modal-open')
}, [])
Но я заметил быструю и короткую задержку при применении класса modal-open
(особенно когда этот класс содержит некоторые стили, такие как margin-right: 17px
, overflow-y: hidden
и position: sticky !important
). Поэтому я вижу, что элемент body
движется Что, конечно, не очень удобно для пользователя.
Итак, я перешел, добавив класс из useEffect
document.body.classList.add('modal-open')
useEffect(() => { ... }, [])
И это работает, но эта строка кода document.body.classList.add('modal-open')
выполняется при каждом повторном рендеринге, а не только один раз, как в useEffect
Так есть ли лучший подход? может быть componentWillMount
эквивалент в хуках, потому что я не касаюсь состояния, я просто манипулирую классами элементов dom?