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

Всем привет. Ребят подскажите пожалуйста, у меня есть 6 товаров

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

7 ответов

10 просмотров
Александр- Автор вопроса

Может нужно что-то уточнить?

Испугался? На самом деле реакт так просто работает. любое изменение состояния или например стэйта редакса (на данные из которого подписан компонент), вызывает перерендер. Так и задумано. Далее результатом работы ререндера компонента обычно являеться объект VDOM. Этот объект потом используется для сравнения: какие объееты реального DOM удалить изменить или добавить. Поэтому сам перерендер не страшен. СТрашно если при КАЖДОМ перерендере у тебя выполняются расчеты со сложностью O(n) > n. (если меньше, то пофиг) Вот что бы их не делать надо юзать useMemo или useCallback+ React.memo (для дочерних компонентов), ну или reselect для redux. Это позволит замемоизировать тяжелые вычисления и не делать их при каждом вычислении.

Александр- Автор вопроса
Sarevok
Испугался? На самом деле реакт так просто работае...

Но сама карточка не перерендеривается. Тупо компонент кнопки

Александр- Автор вопроса

Интересно

Александр
Интересно

Тут главное понять ПЕРЕРЕНДЕР ЭТО НЕ ПЕРЕРИСОВКА. Перерендер это вычисления, цель которых определить, нужно ли перерисовать релальные элементы DOM. т.е. не каждый перендер сопровождается модификацией реального DOM

Александр- Автор вопроса
Sarevok
Тут главное понять ПЕРЕРЕНДЕР ЭТО НЕ ПЕРЕРИСОВКА....

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

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

Это сделано для того что бы не перерисовывать DOM элементы, которые не изменились. Алгоритм сравнения называеться по моему, реконсилинг. Собственно по этому реакт такой и быстрый. ПОтому что VDOM обрабатывается НАМНОГО быстрее чем выполнение реальных операций с DOM И благодаря реконсилингу и VDOM, колво операций с DOM уменьшается до мниимально необходимого.

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

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

Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
Добрый день подскажите пожалуйста может кто то сталкивался с ошибками Sentry 22.10.0 развернутым из helm чарт в Kubernetes? Изначально 3 дня назад очень стало много событий ух...
Tire4 Finist Devops
1
всем привет почти закончил курс После него можно писать свою операционку? Какие библиотеки надо использовать и куда дальше копать для изучения
Linus
22
почому оно не работает?
Vi Chapmann ٩( 💢•̀ з•́)و Chapmann
19
Карта сайта