React Dynamic Tree View: Dynamic tree views are user interface components commonly used to display hierarchical data in a tree structure, where nodes can have parent-child relationships. Each node can be expanded or collapsed to reveal or hide its child nodes, respectively.
These tree structures are particularly useful when representing data with parent-child relationships, such as file systems, organizational charts, nested categories, or any data with nested levels.
This is also called the Hierarchy tree view, Nexted Tree view and parent-child tree view.

Key Features of Tree Views:
- Display data in a tree structure with parent-child relationships.
- Nodes can be expanded to show child nodes or collapsed to hide them.
- Users can interactively expand and collapse nodes by clicking on them.
Usage of Tree Views:
Dynamic tree views are commonly used in various scenarios:
- Displaying files and folders in a file system.
- Representing company hierarchies and reporting structures.
- Displaying product categories and subcategories.
- Creating visualizations of interconnected ideas or concepts.
- Displaying the structure of a document or article.
- Navigating through complex datasets with hierarchical relationships
Steps to Create Tree Views Component in React
Creating a dynamic tree view in React involves the following key concepts to produce a visually appealing component for displaying hierarchical data.
Depending on your project’s complexity, you can start with a basic implementation and expand it to include advanced features as needed.
Key Concepts of Tree View
- Create components for nodes, each rendering its own content and managing its state.
- Maintain the expand/collapse state for each node using the React state.
- Pass data and functions down the component tree to enable interactions.
- Design data structures that mirror the hierarchy of the tree.
- Use components that render themselves to handle nested nodes.
- Capture user clicks on nodes to trigger state changes.
- Use conditionals to determine when to render child nodes.
- Apply styles to nodes for improved visualization
1. Set Up Basic Configuration
First of all, You must set up the following basic configuration –
2. Create Calculator Directory
After creating the React App, You will get the default directory structure. Now, Create a calculator directory like –
myapp
|__src/
|__ components/
| |__tree-view/
| | |__data/
| | |__treeData.js
| |__ TreeView.js
| |__ TreeView.css
|__ App.js
|__ index.js
Default React App contains more folders & files but I have shown here only one
3. Store Tree Views Data
In the src folder of your React project, create a new file named treeData.js (or any suitable name you prefer) inside /src/components/tree-views/data/treeData.js to store your hierarchical data:
This code defines a hierarchical tree structure using nested objects. The structure starts with a root node called “Parent 1,” which has two children: “Child 1” and “Child 2.” “Child 2” itself has a child named “Child 2.1.”
The structure is represented in an array named treeData, which is exported for use in other parts of the application
File Name – treeData.js
const treeData = [
{
id: 1,
name: 'root',
children: [
{
id: 2,
name: 'item 1',
children: []
},
{
id: 3,
name: 'Item 2',
children: [
{
id: 4,
name: 'Item 2.1',
children: []
},
{
id: 5,
name: 'Item 2.2',
children: []
}
]
},
{
id: 6,
name: 'item 3',
children: []
},
{
id: 7,
name: 'item 4',
children: [
{
id: 6,
name: 'item 4.1',
children: []
},
]
},
]
}
];
export default treeData;
4. Create a Tree View Component
The provided code defines a React component that displays a collapsible tree structure. It imports tree data, creates a `TreeNode` component for rendering individual nodes, and a `TreeView` component that uses the `TreeNode` to display the entire tree structure. Clicking on nodes toggles their visibility, and icons change to represent folder or document states.
File Name – TreeView.js
import React, { useState } from 'react';
import treeData from './data/treeData';
const TreeNode = ({ node }) => {
const [isExpanded, setIsExpanded] = useState(false);
const handleToggle = () => {
setIsExpanded(!isExpanded);
};
return (
<div className="tree-node">
<div onClick={handleToggle} className={`node-toggle ${isExpanded ? 'expanded' : ''}`}>
{isExpanded && node.children.length > 0 ? '?' : '?'} {node.name}
</div>
{isExpanded && (
<ul className="child-nodes">
{node.children.map(childNode => (
<li key={childNode.id}>
<TreeNode node={childNode} />
</li>
))}
</ul>
)}
</div>
);
};
const TreeView = () => {
return (
<div>
{treeData.map(rootNode => (
<TreeNode key={rootNode.id} node={rootNode} />
))}
</div>
);
};
export default TreeView;
Steps to write code:
- Import the `React` and `useState` modules from ‘react’.
- Import the `treeData` object from the ‘treeData.js’ file.
- Define a functional component `TreeNode` that takes a `node` prop.
- Inside `TreeNode`, set up a state variable `isExpanded` using the `useState` hook, initialized to `false`.
- Declare a function `handleToggle` that toggles the `isExpanded` state.
- Return JSX for the `TreeNode` component, with a div containing node information and an icon that changes based on `isExpanded`.
- If `isExpanded` is `true`, render a list of child nodes with their own `TreeNode` components.
- Define the `TreeView` component.
- In the `TreeView` component, map through each `rootNode` in the `treeData` and render a `TreeNode` component for each, with a unique key.
- Export the `Tree` component as the default export for this module.
5. Design Tree View Component
These CSS styles help create a visually pleasing and interactive dynamic tree view, with clear indicators for the expand/collapse functionality and proper spacing for a hierarchical structure. You can modify these styles as needed to match your design preferences.
File Name – TreeView.css
/* src/styles.css */
.tree-node {
margin-left: 20px;
border-left: 1px dashed #aaa;
padding-left: 8px;
position: relative;
}
.node-toggle {
cursor: pointer;
transition: color 0.3s;
}
.child-nodes {
margin-left: 20px;
list-style: none;
padding-left: 8px;
}
.child-nodes > li {
margin: 5px 0;
}
Explanation –
- .tree-node: Adds left margin, a dashed border to the left, left padding for indentation, and positions child nodes relatively.
- .node-toggle: Changes cursor to pointer on hover, provides a smooth color transition for the toggle icon.
- .child-nodes: Sets left margin for indentation, removes bullet points from list items, adds left padding.
- .child-nodes > li: Adds vertical spacing between child nodes.
6. Load TreeView Component
- It imports the `TreeView` component.
- The `App` component returns the `TreeView` component, which is intended to render a Tree view interface.
- The `App` component is exported as the default export of the module.
File Name – App.js
import React from 'react';
import TreeView from './components/tree-view/TreeView';
import './components/tree-view/TreeView.css';
function App() {
return (
<div className="App">
<TreeView />
</div>
);
}
export default App;
7. Display Tree View in Web Browser
To display the tree view in a web browser, first run the following command in your terminal.
npm start
After that, open the following URL in your web browser to see the calculator
http://localhost:3000/