ここでは、React コンポーネントとして、開閉可能なツリービューを作ってみます。
コンポーネント名はツリーのノードを示す TreeNode
です。
初期の表示内容としては、ルートの TreeNode
を 1 つだけ配置し、そのラベルをクリックしたときに、子要素となる TreeNode
を 3 つ生成して表示します。
実際のアプリケーションでは、このタイミングで GraphQL サーバーなどからデータを取得してツリー展開していく、といったことができると思います。
下記は TreeNode
コンポーネントの実装です。
ツリーノードの開閉状態は、HTML のチェックボックス (<input type="checkbox">
) から取得できる情報をそのまま利用しています(上記の例では e.target.checked
で参照しています)。
この状態が true
になったとき、動的に子ノードとなる TreeNode
を 3 つ作成して表示しています (createChildNodes
)。
子ノードも TreeNode
なので、クリックすれば無限に掘り進んでいくことができます。
下記は表示をカスタマイズするためのスタイルシートです。
上記コードから CSS Modules の仕組みでインポートしています。
開閉処理自体は TreeNode.tsx
側のコードで完結しているので、スタイル設定がなくても最低限の動作はしますが、このスタイル設定により、
- チェックボックスの代わりにフォルダアイコン(open/closed) を表示
- 子ノードは少しインデントして表示
といったことを行っています。
あとは、どこかのコンポーネントから、次のようにルート要素となる TreeNode
を配置すれば表示できます。
関連記事