開発ガイドライン

  1. ツリーグリッドは、階層的な2次元UIコンポーネントであり、例えばファイルシステムブラウザを実装するために使用されることがあります。
  2. ツリーグリッドでは、ユーザーは矢印キーを使用してナビゲートできます。上下で行を縦に移動し、左右で行内のフォーカス可能な要素間を横に移動します。
  3. ツリーグリッドに関する詳細情報は、以下のリンクを参照してください:
  4. - https://www.w3.org/TR/wai-aria-practices/examples/treegrid/treegrid-1.html
  5. <a name="usage"></a>
  6. ### 使用法
  7. `````TreeGrid`````は、`````table`````および`````tbody`````要素の両方をレンダリングし、`````TreeGridRow``````````tr`````)および`````TreeGridCell``````````td`````)と共に使用してグリッドを構築することを意図しています。
  8. ``````bash
  9. function TreeMenu() {
  10. return (
  11. <TreeGrid>
  12. <TreeGridRow level={ 1 } positionInSet={ 1 } setSize={ 2 }>
  13. <TreeGridCell>
  14. { ( props ) => (
  15. <Button onClick={ onSelect } { ...props }>Select</Button>
  16. ) }
  17. </TreeGridCell>
  18. <TreeGridCell>
  19. { ( props ) => (
  20. <Button onClick={ onMove } { ...props }>Move</Button>
  21. ) }
  22. </TreeGridCell>
  23. </TreeGridRow>
  24. <TreeGridRow level={ 1 } positionInSet={ 2 } setSize={ 2 }>
  25. <TreeGridCell>
  26. { ( props ) => (
  27. <Button onClick={ onSelect } { ...props }>Select</Button>
  28. ) }
  29. </TreeGridCell>
  30. <TreeGridCell>
  31. { ( props ) => (
  32. <Button onClick={ onMove } { ...props }>Move</Button>
  33. ) }
  34. </TreeGridCell>
  35. </TreeGridRow>
  36. <TreeGridRow level={ 2 } positionInSet={ 1 } setSize={ 1 }>
  37. <TreeGridCell>
  38. { ( props ) => (
  39. <Button onClick={ onSelect } { ...props }>Select</Button>
  40. ) }
  41. </TreeGridCell>
  42. <TreeGridCell>
  43. { ( props ) => (
  44. <Button onClick={ onMove } { ...props }>Move</Button>
  45. ) }
  46. </TreeGridCell>
  47. </TreeGridRow>
  48. </TreeGrid>
  49. );
  50. }
  51. `

サブコンポーネント

ツリーグリッド

プロパティ

文書化されたコールバック関数の他に、指定されたプロパティは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属性を他の場所に配置することができます。以下の例を参照してください。

  • 必須: いいえ
  1. function TreeMenu() {
  2. return (
  3. <TreeGrid>
  4. <TreeGridRow level={ 1 } positionInSet={ 1 } setSize={ 2 } isExpanded={ undefined } data-expanded={ false }>
  5. <TreeGridCell>
  6. { ( props ) => (
  7. <Button aria-expanded="false" onClick={ onSelect } { ...props }>Select</Button>
  8. ) }
  9. </TreeGridCell>
  10. </TreeGridRow>
  11. </TreeGrid>
  12. );
  13. }

TreeGridCell

プロパティ

  1. #### children as a function
  2. `````TreeGridCell`````は関数を使用して子要素をレンダリングします:
  3. ``````bash
  4. <TreeGridCell>
  5. { ( props ) => (
  6. <Button onClick={ doSomething } { ...props }>
  7. Do something
  8. </Button>
  9. ) }
  10. </TreeGridCell>
  11. `

レンダープロップに引数として渡されたプロパティは、セル内の子フォーカス可能コンポーネント/要素に渡される必要があります。コンポーネントが使用される場合、onFocustabIndex、およびrefプロパティを正しく処理し、レンダリングする要素にこれらを渡す必要があります。これらのプロパティは、ツリーグリッドのロービングタブインデックス機能を処理するために使用されます。

関連コンポーネント

  • このコンポーネントはRovingTabIndexを実装しています。