Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про React: react, component, recursion, optimization

Как бы ты реализовал компонент аккордеона с поддержкой бесконечной вложенности? Как оптимизировать рендеринг такого аккордеона?

Этот вопрос проверяет понимание рекурсивных компонентов в React и методов оптимизации рендеринга для сложных древовидных структур.

Короткий ответ

Аккордеон с бесконечной вложенностью реализуется через рекурсивный компонент, который отрисовывает себя для каждого уровня вложенности. Для оптимизации используется мемоизация (React.memo), чтобы избежать лишних перерисовок, и ленивая загрузка контента.

Длинный ответ

Реализация аккордеона:
Рекурсивный компонент принимает массив данных и для каждого элемента отрисовывает заголовок и контент. Если у элемента есть вложенные элементы, компонент вызывает сам себя.

const AccordionItem = ({ item }) => {
  const [isOpen, setIsOpen] = useState(false);

  return (
    <div>
      <button onClick={() => setIsOpen(!isOpen)}>
        {item.title}
      </button>
      {isOpen && (
        <div>
          <p>{item.content}</p>
          {item.children?.map(child => (
            <AccordionItem key={child.id} item={child} />
          ))}
        </div>
      )}
    </div>
  );
};

Оптимизация рендеринга:

  • React.memo: Оберните компонент в React.memo, чтобы предотвратить перерисовку при неизменных пропсах.

  • useCallback: Для функций-обработчиков используйте useCallback, чтобы сохранять ссылки между рендерами.

  • Виртуализация: Для очень больших деревьев используйте библиотеки виртуализации (например, react-virtualized), чтобы рендерить только видимые элементы.

  • Ленивая загрузка: Загружайте вложенный контент только при открытии аккордеона.

Когда использовать:

  • Для древовидных структур данных (меню, категории, файловые системы).

  • Когда вложенность может быть динамической и неизвестной на этапе разработки.

Уровень

  • Рейтинг:

    2

  • Сложность:

    7

Навыки

  • React

    React

Ключевые слова

#react

#component

#recursion

#optimization

Подпишись на React Developer в телеграм