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

А у меня кстате вопрос назрел когда мы в атрибутах

устанавливаем какй-то обработчик не важно onClick
мы же не удаляем потом их , видимо Реакт это всё под капотом делает

но если мы через ref это делаем, то мы должны их (обработчики) очищать, так?

19 ответов

14 просмотров

ну, да (хз)

реф это всегда один и тот же объект межу рендерами. а обычный способ это document.querySelector?

Ну, да. Но я имел в виду, например, через ивент когда мы обращаемся к значению инпута e.target.value

через реф это значение из нативного дома, через onChange синтетическое. ты про такое?

Да да

Контроллируемые/неконтроллируемые инпуты

Не, совсем, понятно для меня

через onChage изменение состояния инпута контроллируется стейтом компонента, через реф это нативный дом (через реф не будет ререндера при печатании каждой буквы)

Теперь осенило. Спс)

Drew-Naumenko Автор вопроса

вот спасибо, я подозревал что именно так, я ещё конечно ещё тот знаток , но хотелось бы увидеть пример не на уровне уроков, а какойто более лучше пример кода где без ref не обойтись ну никак я тоже его юзал и там уроки делал какието и ещё что-то писал но чёткого понимания когда юзать ref и через него обработчик навешивать елементу , вмеcто стандартного <btn onClick > у меня нету

Реф это обычный объект с полем current. Каким образом будешь вешать события через него?

Drew-Naumenko Автор вопроса

то что хранит в себе current - эт овыход на этот самый елемент так же? const btnRef = useRef(); <btn ref={btnref}> вот он теперь в current хранит ссылку на btn

Не стоит смотреть на реф только как связь с элементом. Это отличный инструмент хранения данных изменение которых не должно вызывать ререндер

А дальше ? const handleClick = () => console.log('fff') btnRef?.current.onclick = handleClick

Drew-Naumenko Автор вопроса

нет он типо на маунте вешаеться и очищаеться в useEffect const func = ()=> { something do}; useEffect(()=>{ btn.addEventListener("event", func); ()=>{ btn.removeEventListener('event', func) } }, [] )

а в чем преимущество данного подхода перед синтетическим onClick?

Drew-Naumenko Автор вопроса

вот и я не пойму и хочу разобраться когда же без реф не обойтись? но видимо вторая фишка рефа более понятна и оправдана то что он в себя сохранять может , нежели работа с дом елементами

Всевозможные ситуации так вмиг не охватишь, надо отталкиваться от ситуации. Почитай статьи "useRef use cases"

Drew-Naumenko Автор вопроса

ок, спасибо за дискуссию

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта