169 похожих чатов

Если мне нужно выполнять какую-то функцию при изменении значения переменной,

использовать useEffect для этого, это нормальная практика, или придумать что-то другое?

15 ответов

9 просмотров

Слишком абстрактный кейс.

стейт не подойдет?

Что за переменная? useEffect ничего не делает реактивным

если что-то асинхронное - да, только проставь в зависимости ей

Pavel Efremov
если что-то асинхронное - да, только проставь в за...

Вредный совет, в зависимостях хуков должны быть только те переменный, которые внутри используются.

Radik-Khammatov Автор вопроса
Alexandr
Слишком абстрактный кейс.

Есть хук, который в зависимости от скролла страницы до определенного элемента выдает inView=true/false, таких элементов на странице несколько и сразу несколько из них могут быть видны на странице одновременно. Нужно узнать, какой элемент перешел в состояние true последним. В зависимости от того, какой элемент сейчас на странице inView=true, я отображаю справа, какую главу текста сейчас просматривает пользователь. Вот если я для каждой переменной inView1, inView2... создам useEffect и буду отслеживать, перешло ли значение в состояние true, и уже тогда обновлять индикатор прокрутки страницы, это нормально? (есть подозрение, что это можно сделать как-то по другому и проще)

Radik Khammatov
Есть хук, который в зависимости от скролла страниц...

Можно сделать проще, заюзать готовое решение по типу react-virtualized или react-window. Если принципиально написать руками, то лучше, мне кажется, сделать через коллбэк-рефы.

Radik-Khammatov Автор вопроса
Alexandr
Можно сделать проще, заюзать готовое решение по ти...

Спасибо, попробую сделать по другому. Но вообще сама по себе подобная практика использования useEffect для данной ситуации это нормально?

Radik Khammatov
Спасибо, попробую сделать по другому. Но вообще са...

А что ты ему в зависимостях укажешь? Из твоего описания могу предположить, что работа со скроллом ведется через рефы (если напрямую обращаешься к дом-элементам, то это грубейшая ошибка), рефы создаются при маунте компонентов и не меняются, значит на них юзэффект триггерить не получится, другой вариант, если есть, то я его не вижу. Можно попробовать какие-нибудь дополнительные флаги сетать из коллбэк рефов, но не вижу в этом смысла, если можно логику непосредственно там прописать.

Radik Khammatov
Есть хук, который в зависимости от скролла страниц...

если тебе все что надо это отобразить в родителе видимых детей, передавай в детей функцию на добавление и удаления из этого списка видимых, а в детях уже по своей логике добавляй / удаляй их оттуда Для проверки что элемент во вьюпорте посмотри IntersectionObserver api

Dmitriy Shuleshov
Нооо,... но это же реакт...😳😳😕

Интересно каким бы был реакт если бы state сразу сделали реактивным

Dmitriy Shuleshov
Он был бы вью?😂

Ну или у вью сразу был бы только jsx с небольшим сахаром. Странные у меня фантазии короче

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта