開発ガイドライン
ツリーグリッドは、階層的な2次元UIコンポーネントであり、例えばファイルシステムブラウザを実装するために使用されることがあります。
ツリーグリッドでは、ユーザーは矢印キーを使用してナビゲートできます。上下で行を縦に移動し、左右で行内のフォーカス可能な要素間を横に移動します。
ツリーグリッドに関する詳細情報は、以下のリンクを参照してください:
- https://www.w3.org/TR/wai-aria-practices/examples/treegrid/treegrid-1.html
<a name="usage"></a>
### 使用法
`````TreeGrid`````は、`````table`````および`````tbody`````要素の両方をレンダリングし、`````TreeGridRow`````(`````tr`````)および`````TreeGridCell`````(`````td`````)と共に使用してグリッドを構築することを意図しています。
``````bash
function TreeMenu() {
return (
<TreeGrid>
<TreeGridRow level={ 1 } positionInSet={ 1 } setSize={ 2 }>
<TreeGridCell>
{ ( props ) => (
<Button onClick={ onSelect } { ...props }>Select</Button>
) }
</TreeGridCell>
<TreeGridCell>
{ ( props ) => (
<Button onClick={ onMove } { ...props }>Move</Button>
) }
</TreeGridCell>
</TreeGridRow>
<TreeGridRow level={ 1 } positionInSet={ 2 } setSize={ 2 }>
<TreeGridCell>
{ ( props ) => (
<Button onClick={ onSelect } { ...props }>Select</Button>
) }
</TreeGridCell>
<TreeGridCell>
{ ( props ) => (
<Button onClick={ onMove } { ...props }>Move</Button>
) }
</TreeGridCell>
</TreeGridRow>
<TreeGridRow level={ 2 } positionInSet={ 1 } setSize={ 1 }>
<TreeGridCell>
{ ( props ) => (
<Button onClick={ onSelect } { ...props }>Select</Button>
) }
</TreeGridCell>
<TreeGridCell>
{ ( props ) => (
<Button onClick={ onMove } { ...props }>Move</Button>
) }
</TreeGridCell>
</TreeGridRow>
</TreeGrid>
);
}
`
サブコンポーネント
ツリーグリッド
プロパティ
文書化されたコールバック関数の他に、指定されたプロパティはtable
要素に渡されます。TreeGrid
は常に子要素を持つ必要があります。
onFocusRow: ( event: KeyboardEvent, startRow: HTMLElement, destinationRow: HTMLElement ) => void
上矢印キーと下矢印キーを使用してフォーカスが1行から別の行に移動したときに発火するコールバックです。フォーカスが最初の行から最後の行に移動する際に、HomeキーとEndキーでもコールバックが発火します。
コールバックには、イベント、元々フォーカスがあった開始行要素、およびフォーカスが移動した後の目的地行要素が渡されます。
- 必須: いいえ
onCollapseRow: ( row: HTMLElement ) => void
折りたたむ行要素を渡すコールバックです。
- 必須: いいえ
onExpandRow: ( row: HTMLElement ) => void
展開する行要素を渡すコールバックです。
- 必須: いいえ
TreeGridRow
プロパティ
以下に指定されたプロパティ以外の追加プロパティは、tr
要素に渡されるため、例えば行にclassName
を設定することも可能です。
level: number
階層ツリー構造内のレベルを示す整数値です。カウントは1から始まります。1
の値は構造のルートレベルを示します。
- 必須: はい
positionInSet: number
セット内の位置を表す整数値です。セットは特定のレベルでの要素の数です。カウントは1から始まります。
- 必須: はい
setSize: number
この特定の階層レベルにおけるセット内のアイテムの総数を表す整数値です。
- 必須: はい
isExpanded: boolean
行が展開されているか折りたたまれているかを示すオプションの値です。現在、この値は行のaria-expandedプロパティを正しく設定するだけで、他の組み込みの動作はありません。
行、セル、またはセル内の要素の他の場所でaria-expanded
を実装する必要がある場合は、isExpanded={ undefined }
を渡すことができます。キーボードナビゲーションが引き続き機能するように、data-expanded
属性をtrue
/false
のいずれかで追加します。これにより、TreeGrid
コンポーネントはキーボードインタラクションを管理し続け、aria-expanded
属性を他の場所に配置することができます。以下の例を参照してください。
- 必須: いいえ
function TreeMenu() {
return (
<TreeGrid>
<TreeGridRow level={ 1 } positionInSet={ 1 } setSize={ 2 } isExpanded={ undefined } data-expanded={ false }>
<TreeGridCell>
{ ( props ) => (
<Button aria-expanded="false" onClick={ onSelect } { ...props }>Select</Button>
) }
</TreeGridCell>
</TreeGridRow>
</TreeGrid>
);
}
TreeGridCell
プロパティ
#### children as a function
`````TreeGridCell`````は関数を使用して子要素をレンダリングします:
``````bash
<TreeGridCell>
{ ( props ) => (
<Button onClick={ doSomething } { ...props }>
Do something
</Button>
) }
</TreeGridCell>
`
レンダープロップに引数として渡されたプロパティは、セル内の子フォーカス可能コンポーネント/要素に渡される必要があります。コンポーネントが使用される場合、onFocus
、tabIndex
、およびref
プロパティを正しく処理し、レンダリングする要素にこれらを渡す必要があります。これらのプロパティは、ツリーグリッドのロービングタブインデックス機能を処理するために使用されます。
関連コンポーネント
- このコンポーネントは
RovingTabIndex
を実装しています。