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

Уместно ли определять некоторые UI элементы не путём отслеживания их

состояния в локальном стейте/сторе, а взаимодействуя с DOM? Вот пример: есть древовидная структура папок. Если в какой-либо дочерней папке (на любом уровне иерархии в дереве) имеется файл, то надо отображать индикатор, что папка не пустая у самой папки и у её родителей по цепочке, вплоть до корневого элемента. В нативном JS это можно сделать очень просто с помощью навешивания доп. классов, а дальше квери селектором смотреть имеющийся класс у потомка и навешивать всё эт дело заново, если файл удалили, или добавили в другой директории, НО в реакте же вся фишка в том, что ты должен работать с состояниями, а тут это не совсем удобно становится, т.к. при каждом удалении/добавлении файлов надо мурыжить массив заново, а т.к. это дерево, то без рекурсии при переборах никак не обойтись и отсюда вытекает вопрос: можно ли в реакте обращаться к DOM элементам напрямую, меняя отображение UI минуя стейт/стор, И насколько это вообще оправдано (просто не совсем понимаю, какая операция выходит более ресурсоёмкой: рекурсивная обработка массива с вложенностями или операции с DOM-деревом).

13 ответов

6 просмотров

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

Lastiqe-Adadurov Автор вопроса
Тимофей 🛴
Нет нельзя, скорее всего если хорошо подумать твою...

Да задача уже решена, я уже всё отобразил, а все "лампочки" хранятся в сторе. Просто задумался, мб как-то можно "удешевить" отображение UI не путём перебора этого массива, а повесить всю работу на браузер и пущай он в DOM дереве там роется и выдает всю вложенность с нужными мне путями до дочерних папок. Штош, увы(

Правильно написанная рекурсивная работа с деревом эффективнее, чем троганье за DOM. Ну и нельзя трогать DOM там, где работает реакт. Если уверен в себе и хочешь написать супер-оптимально, можешь сам рендерить и управлять домом, не создавая компонент реакта

Lastiqe Adadurov
Да задача уже решена, я уже всё отобразил, а все "...

Не он роется, а ты. И ты это делать будешь менее эффективно, чем реакт

Lastiqe Adadurov
Да задача уже решена, я уже всё отобразил, а все "...

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

Lastiqe-Adadurov Автор вопроса
Ivan 🧑‍🚀
Правильно написанная рекурсивная работа с деревом ...

Не, такой вариант точно не подходит) Ну в целом я так и думал, что рыться в ДОМе не ставя в известность Реакт, в реакт-приложении - плохая идея.

Lastiqe-Adadurov Автор вопроса
Ivan 🧑‍🚀
В среднем эффективная работа с DOM дороже по ресур...

А что ты имел под правильно написанной? Я вот к примеру обычной рекурсивной функой и .map() методом внутри неё массив перебираю. Это сильно неэффективно?

Lastiqe Adadurov
А что ты имел под правильно написанной? Я вот к пр...

Смотреть надо. Я про разумное использование мемоизации и вызовов setState во избежание лишних рендеров

Реакт и создан что б не заморачиваться, теоретически можно с дом отработать эффективней чем реакт, но это неудобно и зачастую не нужно. (Явно не для того что дерево каталогов нарисовать, это тривиал)

Lastiqe-Adadurov Автор вопроса
Dmitriy Shuleshov
Реакт и создан что б не заморачиваться, теоретичес...

Да дело не в отрисовке и сложности. Я спрашивал про то, что менее ресурсоёмко && уместно при использовании реакта. Вариант с обращением к ДОМу неуместен, если компонент рендерится реактом, так что остается делать через реакт и состояния (собсна через него изначально и сделано)

Lastiqe-Adadurov Автор вопроса
Dmitriy Shuleshov
Я ответил на вопрос что менее ресурсоемко

На этот вопрос уже выше ответили, что рекурсивный перебор массива эффективней любого ковыряния в ДОМе.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
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
Карта сайта