DropDown with submenu

Пытаюсь сделать DropDown для user, на подобии как в youtube, где есть главное меню и под меню, определяю я вот так

const dropDownData = [
                {
                    id: 1,
                    path: "/account",
                    title: translation[lang].useDropDown["main-menu"].account,
                    icon: <FaUserCircle />,
                    submenu: []
                },
                {
                    id: 2,
                    path: "/settings",
                    title: translation[lang].useDropDown["main-menu"].settings,
                    icon: <AiFillSetting />,
                    submenu: []
                },
                {
                    id: 3,
                    path: "",
                    title: translation[lang].useDropDown["main-menu"].lang,
                    action: userDropDownActions.language,
                    icon: <MdLanguage />,
                    submenu: [
                        {
                            id: 1,
                            type: "en",
                            title: "English",
                        },
                        {
                            id: 2,
                            type: "ru",
                            title: "Русский",
                        },
                    ]
                },
                {
                    id: 4,
                    path: "",
                    title: translation[lang].useDropDown["main-menu"].exit,
                    action: userDropDownActions.logout,
                    icon: <BiExit />,
                    submenu: [],
                }
            ]

export const UserDropDownList: React.FC<IUserDropDownListProps> = (): JSX.Element => {
    const [submenuData, setSubmenuData] = useState<IUserDropDownSubmenu[]>([]);
    const [isOpenSubmenu, setIsOpenSubmenu] = useState<boolean>(false);

    const handlerBack = (): void => {
        setIsOpenSubmenu(false);
    };

    return (
        <nav className={style.userDropDownNav}>
            {!isOpenSubmenu && (
                <ul className={style.userDropDownList}>
                    {userDropDownData.map((item: IUserDropDownData) => (
                        <UserDropDownItem
                            key={item.id}
                            data={item}
                        />
                    ))}
                </ul>
            )}

            {isOpenSubmenu && (
                <UserDropDownSubmenuList
                    data={submenuData}
                    handlerBack={handlerBack}
                />
            )}
        </nav>
    );
};

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

Как можно это реализовать? Что бы в компонент по мере увеличении кода в случаи добавления нового пункта не приходилось прописывать целый компонент а то и 2 компонента?


Ответы (0 шт):