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

Как сделать несколько выпадающих списков на ReactJS?

Здравствуйте, хочу сделать несколько выпадающих списков на React, как это можно сделать одним useState()?
Нужно чтобы при навидении на элемент открывался выпадающий список и на каждый элемент он должен иметь свой контент? У меня есть рабочий способ, но он требут рефакторинга

import React from 'react'
import { LBar, LBarMenu, LBarMenuItem, LBarMenuLink, LBarMenuModal } from './leftbar.style'

export const Leftbar = () => {
  const [isOpen, setIsOpen] = React.useState<'kids' | 'women' | 'men' | null>()
  const onMouseKidsEnter = () => {
    setIsOpen('kids')
  }

  const onMouseWomenEnter = () => {
    setIsOpen('women')
  }

  const onMouseMenEnter = () => {
    setIsOpen('men')
  }

  const onMouseLeave = () => {
    setIsOpen(null)
  }

  return (
    <>
      <LBar>
        <LBarMenu>
          <LBarMenuItem onMouseEnter={onMouseKidsEnter} onMouseLeave={onMouseLeave}>
            Kids
          </LBarMenuItem>
          <LBarMenuItem onMouseOver={onMouseWomenEnter} onMouseLeave={onMouseLeave}>
            Women
          </LBarMenuItem>
          <LBarMenuItem onMouseEnter={onMouseMenEnter} onMouseLeave={onMouseLeave}>
            Men
          </LBarMenuItem>
        </LBarMenu>
      </LBar>
      <LBarMenuModal isOpen={isOpen === 'kids'}>
        <h1>kids</h1>
      </LBarMenuModal>
      <LBarMenuModal isOpen={isOpen === 'women'}>
        <h1>women</h1>
      </LBarMenuModal>
      <LBarMenuModal onMouseEnter={onMouseMenEnter} onMouseLeave={onMouseLeave} isOpen={isOpen === 'men'}>
        <LBarMenuLink to='men/lifestyle'>Lifestyle</LBarMenuLink>
        <LBarMenuLink to='men/running'>Running</LBarMenuLink>

        <LBarMenuLink to='men/basketball'>Basketball</LBarMenuLink>

        <LBarMenuLink to='men/lifestyle'>Jordan</LBarMenuLink>

        <LBarMenuLink to='men/lifestyle'>Training & Gym</LBarMenuLink>

        <LBarMenuLink to='men/lifestyle'>Golf</LBarMenuLink>
        <LBarMenuLink to='men/lifestyle'>Track & Field</LBarMenuLink>

        <LBarMenuLink to='men/lifestyle'>Skateboarding</LBarMenuLink>

        <LBarMenuLink to='men/lifestyle'>Tennis</LBarMenuLink>

        <LBarMenuLink to='men/lifestyle'>Sandals & Slides</LBarMenuLink>
        <LBarMenuLink to='men/lifestyle'>Shoes $100 & Under</LBarMenuLink>
        <LBarMenuLink to='men/lifestyle'>All Shoes</LBarMenuLink>
      </LBarMenuModal>
    </>
  )
}
  • Вопрос задан
  • 149 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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