@lexstile

Не могу понять, почему по клику компонент рендерится два раза?

Есть меню, у него есть айтемы, на них навешен обработчик.
По клику на item он рендерится, если еще раз по нему (этому же item) кликнуть, он снова рендерится (не рендерится только после 2 клика на один и тот же элемент), этого быть недолжно. Как можно поправить?

App.jsx
spoiler
const AppComponent = () => {
  const [activePage, setActivePage] = useState('home');

  const handleClickMenuItem = useCallback((page) => () => setActivePage(page), []);

  console.log('activePage', activePage);
  return (
    <>
      <Header />
      <Footer activePage={activePage} onClick={handleClickMenuItem} />
    </>
  );
};

export const App = memo(AppComponent);

Footer.jsx
spoiler
const withIcon = (Icon, color) => <Icon fill={color} width={28} height={28} />;

const FooterComponent = ({ activePage, onClick }) => (
  <div className={cx('footer')}>
    {menuItems.map(({ alias, icon }) => (
      <div key={alias} className={cx('nav-item')} onClick={onClick(alias)}>
        {withIcon(icon, alias === activePage ? '#3f8ae0' : '#99a2ad')}
      </div>
    ))}
  </div>
);

export const Footer = memo(FooterComponent);


5ebcf8b44d79c155901101.png
  • Вопрос задан
  • 432 просмотра
Решения вопроса 1
@Aves
https://reactjs.org/docs/strict-mode.html#detectin...
Поправлюсь, в dev режиме весь Functional component вызывается дважды.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
miraage
@miraage
Старый прогер
// take this
onClick={onClick(alias)}>
// change to this
onClick={() => onClick(alias)}>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы