Егор
Раньше не было агрессии и оскорблений
Kurzdor
или что то типа react infinite scroll в поиск
Sergey
Раньше не было агрессии и оскорблений
Может не в России было дело?
Dmitriy
Тут кстати тоже ошибка. `useEffect(() => { inputRef.current.focus() }, [inputRef.current])` правильно
и что это значит? ты ожидаешь что ссылка на ноду изменится?
Kurzdor
это кстати хуевый пример если случайно зарендерится инпут, то зачем еще фокусить на него?
Kurzdor
не достаточно только useEffect(subscribeFn, [])
i
как можно отключитть получение фокуса у элемента?
Егор
и что это значит? ты ожидаешь что ссылка на ноду изменится?
еще раз, не факт что при рендере отрисуется инпут (кстати и при первом рендере не помню вызовется ли хук до присвоения рефа или нет. И нельзя полагаться на то что типа мы такие умные и знаем что всегда отрисуется при рендере - добавили условие отрисовки инпута и забыли про зависимость и все сломалось.
Егор
Безопасней всегда подписываться на все зависимости. Если они не меняются - хуже точно не будет, но гарантирует что код не сломается. Все что объявляется внутри функции компонента нужно считать изменяемым. Меньше ошибок, меньше времени на отладку. Если в хуке у вас будет больше 3 зависимостей - скорей всего что-то не так с хуком либо компонент слишком большой и нужно разбивать на несколько, не припомню что бы на моей практике такое было вообще.
Егор
Я делаю исключения для всякие setState повторю, без них не больше 3 зависимостей. А всякие рефы и т.д. лучше добавлять всегда.
Егор
Сделай const ref = useRef(null); console.log(ref.current);
Егор
Егор
поэтому у вас в зависимостях и куча такая
Максимум 3 зависимости - это куча?
Dmitriy
Проверку внутри хука на `ref.current != null`добавить
так как спасет добавление рефа в зависимость так и не услышал
Егор
Я все сказал)
Dmitriy
Егор
Для тебя бесстолку)
Dmitriy
Я понял одно что ты с перепугу все в зависимости добавляешь, на всякий случай)
Kurzdor
ребят, почему я теряю файл (event.target.files[0]) прокидывая его в аргумент функции, а когда я прокидываю целый нахрен ивент, то все нормально?
Nikolai
как можно отключитть получение фокуса у элемента?
Перехватить на погружении. onFocusCapture на контейнере и проверять что фокусится
Nikolai
@EgorKluch пустой массив - это нормальная практика. реф точно не нужен в зависимостях - это бессмысленно
i
@Baxxterkhv как это сделать?
Dmitriy
Это называется управление рисками
Ты почитай вообще зачем оставили ручное управление зависимостями. Можно было сделать так что б реакт сам за всем вотчил. Глядя на зависимости эффекта я сразу вижу за чем он следит и на что тригерится. А если там в зависимостях что-то типа рефа, то это сродни такому списку [1, 2, 3] - те не имеет смысла
Dmitriy
Жду примера багов когда не добавил реф в зависимости
Егор
Третий раз скажу - при первом рендеринге не факт что отрисуется элемент, на который нужен реф
Dmitriy
Егор
Егор
Если на ref.current подписаться
i
не работает прерывание событий
i
тогда ведь и кликнуть нельзя, мне нужно чтоб фокус срабатывал у родителя, а у дочерних элементов срабатывал клик(что бы можно было вписатть тексмт и нажать кнопку) но не срабатывал фокус что бы не сбивать фокус с родителя
i
не могу даже загуглить onFocusCapture
i
это что? я хочу сделать поле статуса профиля как в вконтакте, там на div нажимаешь и пояалентся инут, вводишь в него текст и нажимаешь кнопку и ток если нажимаешь на что- то другое фокус сходит
A
Как правильно сделать сворачивающийся sidebar в реакте? Можете дать ссылку на туториал или коротко объяснить?
Artem
Все переменные что участвуют в хуке должны быть в зависимостях) Я только функции типа setState и константы извне не добавляю
интересная инфа. есть источник по best practices ? хуки ведут себя не очевидно, зачастую
Dmitriy
useEffect вызовется при отрисовке элемента
жду рецензии https://codesandbox.io/s/keen-wescoff-1iow9
Dmitriy
Лень
ну смотри прямо противоречит твоим словам. Тебе лень потвердить свои слова?
Daniil
жду рецензии https://codesandbox.io/s/keen-wescoff-1iow9
Человек тебе не привел ни одного адекватного кейса, не трать просто время на это
Nikolai
не могу даже загуглить onFocusCapture
Без гугла людям не веришь? Повесь и проверь сам. Не разжевывать же все
i
@Baxxterkhv а что вываодить?
Егор
i
свойство какое?
Егор
https://reactjs.org/docs/hooks-faq.html#is-it-safe-to-omit-functions-from-the-list-of-dependencies
Ну или на русском https://ru.reactjs.org/docs/hooks-faq.html#is-it-safe-to-omit-functions-from-the-list-of-dependencies
Егор
Это про функции, гдет когда читал было про зависимости, чет не могу найти.
Nikolai
свойство какое?
target, relatedTarget
Егор
Настроение есть пока)
Потроллить? Реально помойка) У меня видимо тоже настроение чет троллям доказывать
Nikolai
Нашел.
Так там как раз ниже абзац - если на пропсы или стейт не ссылается - можно опустить
Ivan
Нашел.
https://overreacted.io/a-complete-guide-to-useeffect/
i
@Baxxterkhv получает дочерний элемент, а во время второго клика по другому дочернему элементу или внешнему элементу, событие клика не срабатывает, т.к теряется фокус родителя
Ivan
https://overreacted.io/a-complete-guide-to-useeffect/
Двумя словами — рефы можно не пихать в зависимости, ЕСЛИ изменение значения в рефе не должно триггерить эффект.
Егор
https://overreacted.io/a-complete-guide-to-useeffect/
dispatch и setState извне константы. useRef - ошибочка, useRef.current не константа
Егор
Двумя словами — рефы можно не пихать в зависимости, ЕСЛИ изменение значения в рефе не должно триггерить эффект.
Ну если не должно триггерить - то да. Но тогда там и не должно его быть по хорошему.
Ivan
dispatch и setState извне константы. useRef - ошибочка, useRef.current не константа
Контейнер рефа — константа, в current всегда будет актуальный.
Kurzdor
жду рецензии https://codesandbox.io/s/keen-wescoff-1iow9
если что то тут изза изменения(ререндера) инпута изменяется ссылка на ref.current
Егор
Объекты передаются по ссылке же, ну
Ну да, но это странный кейс. Если ты хочешь что-то сделать с ref-ом, то тебе вероятно есть разница - есть ли он или еще пока нет его. Иначе потенциально баги.
Егор
Но вообще можно пренебречь этим, и смириться с возможным болезненным дебагом
Kurzdor
и потому всегда ререндерит компонент, когда не нужно
Kurzdor
https://github.com/welldone-software/why-did-you-render
Dmitriy
Нашел.
ну по руски ж написано от пропов или стейта
Егор
и потому всегда ререндерит компонент, когда не нужно
Это про микрооптимизацию, когда она нужна. Она в 99% случаях не нужна. Когда есть проблемы - почему бы и не оптимизировать?