использовать useEffect для этого, это нормальная практика, или придумать что-то другое?
Слишком абстрактный кейс.
стейт не подойдет?
Что за переменная? useEffect ничего не делает реактивным
если что-то асинхронное - да, только проставь в зависимости ей
Вредный совет, в зависимостях хуков должны быть только те переменный, которые внутри используются.
Есть хук, который в зависимости от скролла страницы до определенного элемента выдает inView=true/false, таких элементов на странице несколько и сразу несколько из них могут быть видны на странице одновременно. Нужно узнать, какой элемент перешел в состояние true последним. В зависимости от того, какой элемент сейчас на странице inView=true, я отображаю справа, какую главу текста сейчас просматривает пользователь. Вот если я для каждой переменной inView1, inView2... создам useEffect и буду отслеживать, перешло ли значение в состояние true, и уже тогда обновлять индикатор прокрутки страницы, это нормально? (есть подозрение, что это можно сделать как-то по другому и проще)
Можно сделать проще, заюзать готовое решение по типу react-virtualized или react-window. Если принципиально написать руками, то лучше, мне кажется, сделать через коллбэк-рефы.
Спасибо, попробую сделать по другому. Но вообще сама по себе подобная практика использования useEffect для данной ситуации это нормально?
А что ты ему в зависимостях укажешь? Из твоего описания могу предположить, что работа со скроллом ведется через рефы (если напрямую обращаешься к дом-элементам, то это грубейшая ошибка), рефы создаются при маунте компонентов и не меняются, значит на них юзэффект триггерить не получится, другой вариант, если есть, то я его не вижу. Можно попробовать какие-нибудь дополнительные флаги сетать из коллбэк рефов, но не вижу в этом смысла, если можно логику непосредственно там прописать.
если тебе все что надо это отобразить в родителе видимых детей, передавай в детей функцию на добавление и удаления из этого списка видимых, а в детях уже по своей логике добавляй / удаляй их оттуда Для проверки что элемент во вьюпорте посмотри IntersectionObserver api
Крутая штука, не знал про неё. : D
Нооо,... но это же реакт...😳😳😕
Интересно каким бы был реакт если бы state сразу сделали реактивным
Ну или у вью сразу был бы только jsx с небольшим сахаром. Странные у меня фантазии короче
Обсуждают сегодня