Tree view
Um modo de visualização em árvore apresentando uma lista hierárquica.
As visualizações em árvore podem ser usadas para representar um navegação no sistema de arquivos para exibir pastas e arquivos, um item representando uma pasta pode ser expandido para revelar o conteúdo da pasta, que pode ser arquivos, pastas ou ambos.
- Applications
- Documents
<TreeView
aria-label="file system navigator"
defaultCollapseIcon={<ExpandMoreIcon />}
defaultExpandIcon={<ChevronRightIcon />}
sx={{ height: 240, flexGrow: 1, maxWidth: 400, overflowY: 'auto' }}
>
<TreeItem nodeId="1" label="Applications">
<TreeItem nodeId="2" label="Calendar" />
</TreeItem>
<TreeItem nodeId="5" label="Documents">
<TreeItem nodeId="10" label="OSS" />
<TreeItem nodeId="6" label="MUI">
<TreeItem nodeId="8" label="index.js" />
</TreeItem>
</TreeItem>
</TreeView>
- Applications
- Documents
- Applications
- Documents
Objeto complexo
Enquanto o componente TreeView
/TreeItem
maximiza a flexibilidade, um passo extra é necessário para lidar com um objetos complexos.
Vamos considerar uma variável de dados com a seguinte estrutura, a recursão pode ser usada para lidar com este cenário.
const data = {
id: 'root',
name: 'Parent',
children: [
{
id: '1',
name: 'Child - 1',
},
// …
],
};
- Child - 1
- Child - 3
Propriedade ContentComponent
Você pode usar a propriedade ContentComponent
e o hook useTreeItem
para customizar ainda mais o comportamento do TreeItem.
Como limitar a expansão para clicar no ícone:
- Applications
- Documents
Ou aumentando a largura do indicador de estado:
- Applications
- Documents
- Hello
- Subtree with children
- World
- Something something
All Mail
Trash
Social
Updates
Forums
Promotions
History
- One
- Five
- Seven
O comportamento dos itens desabilitados da árvore depende da propriedade disabledItemsFocusable
.
Se é falsa:
- As teclas de setas não focarão nos itens desabilitados e o próximo item não desabilitado será focado.
- Digitar o primeiro caractere do rótulo de um item desabilitado não focará no item.
- Interação do mouse ou teclado não irá expandir/recolher itens desabilitados.
- Interação do mouse ou teclado não selecionará itens desabilitados.
- Shift + teclas de setas irão pular itens desabilitados e o próximo item não desabilitado será selecionado.
- Foco programático não focará itens desabilitados.
Se é verdadeira:
- As teclas de setas focarão em itens desabilitados.
- Digitar o primeiro caractere do rótulo de um item desabilitado focará no item.
- Interação do mouse ou teclado não irá expandir/recolher itens desabilitados.
- Interação do mouse ou teclado não selecionará itens desabilitados.
- Shift + teclas de setas não irão pular itens desabilitados, mas o item desabilitado não será selecionado.
- Foco programático focará itens desabilitados.
Acessibilidade
(WAI-ARIA: https://www.w3.org/WAI/ARIA/apg/patterns/treeview/)
O componente segue as práticas de autoria da WAI-ARIA.
Para ter uma exibição em árvore acessível, você deve usar aria-labelledby
ou aria-label
para fazer referência ou fornecer um rótulo na TreeView, caso contrário, os leitores de tela irão anunciá-lo como "tree", tornando difícil entender o contexto de um item específico da árvore.