Предотвратить повторный рендеринг компонента меню

https://codesandbox.io/s/little-thunder-so1omh?file=/src/menu/menu.scss

это моя проблема. когда я обновляюсь, меню открывается и закрывается на мгновение

Я хочу предотвратить повторный рендеринг. это мой console.info, когда я каждый раз обновляюсь:

ложное «открытое»
menu.jsx: пункт 23
menu.jsx: 25 перерисовано
menu.jsx:22 true 'открыто'
menu.jsx: 23 неопределенный «элемент»
menu.jsx:25 перерисовано

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
61
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

это не баг, а фича, реагируйте после 16.3.0. будет отображаться дважды, как в режиме разработки. см. проблему в реагирующем репозитории ниже, удачного кодирования, у вас все отлично!

https://github.com/facebook/react/issues/15074

Возникла проблема в SCSS. меню открывается и закрывается исправлено, теперь вы можете проверить

https://codesandbox.io/s/eager-microservice-b7p4gc?file=/src/menu/menu.scss
Ответ принят как подходящий

Я просмотрел код, его открытие и закрытие вызывает не рендеринг, а анимация класса .collapse.

вы можете проверить дело, используя реф

// модификация стиля .скрытый { видимость: скрыто !важно }

 // this is a flag to detect atleast one click 
 // on the menu item
 // this will be false when app loads the first time
 // then after user click on the menu, it will set to true
 let isSelectedOnce = React.useRef(false);

  const handleDropDown = (id) => {
    setItemPressed(id);
    if (itemPressed !== id) {
      setOpen(true);
    } else {
      setOpen((pre) => !pre);
    }
    if (!isSelectedOnce.current) {
      isSelectedOnce.current = true;
    }
  };

  return (
    ...
     <ul
        className = {`collapse ${
          open && itemPressed === "menu" ? "show" : ""
        }  ${!isSelectedOnce.current ? "hidden" : ""}`}
      >
        <li>Menu Category</li>
        <li>products list</li>
        <li>Add product</li>
      </ul>
     </li>

Я думаю, вам нужно держать пункты меню свернутыми, чтобы начать с

Надеюсь, это поможет вам найти лучшее решение

Редактировать: больше о когда использовать ссылки

для чего isSelectedOnce?

Negar Nasiri 22.11.2022 16:29

@NegarNasiri Я отредактировал ответ, надеюсь, это поможет

Azzy 22.11.2022 17:45

Другие вопросы по теме