Задать вопрос

Как в реакт подгружать меню не обновляя его свойств при перерендере?

приложение SPA react, сверху грузится шапка, с боку боковое меню с ant.design - https://ant.design/components/menu/

Проблема в том что при каждом смене url меню обновляется сменяя активный класс. Подскажите пожалуйста как решить эту задачу. Спасибо.

import React from 'react';
import ReactDOM from 'react-dom';
import { Link } from "react-router-dom";
import { Menu, Icon, Button } from 'antd';
import Logo from "../logo";
import "antd/dist/antd.css";
import './index.scss'
import logo from '../logo';

const { SubMenu } = Menu;

export default class LeftMenu extends React.Component {
  state = {
    collapsed: true,
  };
  
  toggleCollapsed = () => {
    this.setState({
      collapsed: !this.state.collapsed,
    });
  };

  render() {
    return (
      <div className="navigation">
        <div className="navigation-button" onClick={this.toggleCollapsed}>
          <Logo />
        </div>
        <Menu
          className="leftMenu"
          defaultSelectedKeys={['1']}
          // defaultOpenKeys={['sub1']}
          mode="inline"
          theme="dark"
          inlineCollapsed={this.state.collapsed}
        >
          <Menu.Item key="1">
            <Link to="/"><Icon type="home" />
              <span>Wellcome Page</span>
            </Link>
          </Menu.Item>
          <Menu.Item key="2">
            <Link to="/a3">
              <Icon type="desktop" />
              <span>a3</span>
            </Link>
          </Menu.Item>
          <Menu.Item key="3">
            <Link to="/a2">
              <Icon type="tag" />
              <span>a2</span>
            </Link>
          </Menu.Item>
          <Menu.Item key="4">
            <Link to="/a1">
              <Icon type="bar-chart" />
              <span>a1</span>
            </Link>
          </Menu.Item>
          <SubMenu
            key="sub1"
            title={
              <span>
                <Icon type="block" />
                <span>Dashboards</span>
              </span>
            }
          >
            <Menu.Item key="5"><Link to="/dashboards/av">av</Link></Menu.Item>
            <Menu.Item key="6"><Link to="/dashboards/1">1</Link></Menu.Item>
            <Menu.Item key="7"><Link to="/dashboards/2">2</Link></Menu.Item>
            <Menu.Item key="8"><Link to="/dashboards/3">3</Link></Menu.Item>
            <Menu.Item key="9"><Link to="/dashboards/4">4</Link></Menu.Item>
            <Menu.Item key="10"><Link to="/dashboards/5">5</Link></Menu.Item>
            <Menu.Item key="11"><Link to="/dashboards/6">6</Link></Menu.Item>
            <Menu.Item key="12"><Link to="/dashboards/7">7</Link></Menu.Item>
          </SubMenu>
        </Menu>
      </div>
    );
  }
}


подгружается как <LeftMenu />
  • Вопрос задан
  • 346 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • Merion Academy
    Frontend-разработка на React
    4 месяца
    Далее
  • ProductStar
    React: отточите навыки интерфейсной разработки
    6 недель
    Далее
Пригласить эксперта
Ответы на вопрос 2
hzzzzl
@hzzzzl
может проще вместо Link использовать NavLink, тогда будет свойство activeClassName , зависящее от url

https://github.com/ReactTraining/react-router/blob...
Ответ написан
@Dasslier
FrontEnd Developer
Не какой-то профи в Реакте, но с чего вы взяли, что происходит перерендер? Если идет смена активного класса, то Реакту на такое должно быть по боку, т.к. он сравнивает дом дерево по ключам, а не классам. Если у компонента не меняется ни стейт, ни пропсы, он тогда не будет делать ререндер

П.С. Сделайте массив с данными меню, а потом 1 раз через map отрисуйте все, зачем делать этот копипаст ужасный?
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽
ITK academy Казань
от 50 000 до 90 000 ₽