Explicação detalhada do código:
O NavSecondary
é um componente de navegação secundária, ideal para menus laterais ou secundários de um layout. Ele utiliza o SidebarGroup
e SidebarMenu
para organizar os itens e exibí-los de maneira estruturada. Cada item do menu é representado por um ícone e um título, e ao ser clicado, leva o usuário a um link especificado.
Estrutura do componente:
-
Importações:
SidebarGroup
,SidebarGroupContent
,SidebarMenu
,SidebarMenuButton
,SidebarMenuItem
são componentes de layout e estrutura para o menu.- O ícone e título dos itens são extraídos do objeto
item
, ondeitem.icon
é o ícone associado ao item eitem.title
é o texto visível.
-
Componente
NavSecondary
:- O componente recebe como props a lista
items
e qualquer outra propriedade adicional via...props
. - A estrutura do menu é envolta em
SidebarGroup
para manter a organização, e dentro deSidebarGroupContent
é onde os itens são mapeados.
- O componente recebe como props a lista
-
Mapeamento dos itens:
- Para cada
item
da listaitems
, é criado umSidebarMenuItem
, que contém umSidebarMenuButton
. - O
SidebarMenuButton
envolve um link (<a href={item.url}>
), que redireciona o usuário para o URL correspondente quando o item for clicado.
- Para cada
-
Icones e Títulos:
- Cada item possui um ícone (
item.icon
) e um título (item.title
) que são exibidos no botão do menu.
- Cada item possui um ícone (
Emojis:
- 📋 para representar os itens de navegação.
- 🔗 para representar os links de navegação.
Código completo:
import * as React from 'react'
import {
SidebarGroup,
SidebarGroupContent,
SidebarMenu,
SidebarMenuButton,
SidebarMenuItem,
} from '@/components/ui/sidebar'
export function NavSecondary({ items, ...props }) {
return (
<SidebarGroup {...props}>
<SidebarGroupContent>
<SidebarMenu>
{items.map((item) => (
<SidebarMenuItem key={item.title}>
<SidebarMenuButton asChild size="sm">
<a href={item.url}>
<item.icon />
<span>{item.title}</span>
</a>
</SidebarMenuButton>
</SidebarMenuItem>
))}
</SidebarMenu>
</SidebarGroupContent>
</SidebarGroup>
)
}