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

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

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

7 ответов

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

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

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

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

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

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

Интересно

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

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

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

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

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

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта