First of all, what is recursion ? Wikipedia say :
The most common application of recursion is in mathematics and computer science, where a function being defined is applied within its own definition. While this apparently defines an infinite number of instances (function values), it is often done in such a way that no infinite loop or infinite chain of references ("crock recursion") can occur.
If you need to create a tree of directory and folder, or need to parse and display deep tree of data, you are in the good place !
Imagine that we have this Recursive.tsx component :
import RecursiveChildren from "./RecursiveChildren";
function Recursive () {
type ItemNode = {
name: string;
children?: ItemNode[];
};
const tree: ItemNode = {
name: "tree",
children: [
{
name: "fruit",
children: [
{
name: "rouge",
children: [
{
name: "cassis",
},
{
name: "fraise",
children: [
{
name: "fraise des bois",
},
{
name: "fraise gariguette",
},
],
},
],
},
],
},
{
name: "legume",
children: [
{
name: "tubercule",
children: [
{
name: "oignon",
},
{
name: "pomme de terre",
},
],
},
],
},
],
};
return (
<div style={{ textAlign: "left" }}>
<RecursiveChildren name={tree.name} children={tree.children} marginLeft={0}/>
</div>
)
}
export default Recursive;
As you can see, the tree data structure can have an infinite of children, so we need to implement a recursive component to browse the whole structure.
You can find a simple example below (RecursiveChildren.tsx):
type ItemNode = {
name: string;
children?: ItemNode[];
};
type Indentation = {
marginLeft: number
}
function RecursiveChildren (props: ItemNode & Indentation) {
if (props.children && props.children.length > 0) {
return (
<div style={{ marginLeft: props.marginLeft }}>
{ props.name }
{ props.children.map(child => {
return <RecursiveChildren name={child.name} children={child.children} marginLeft={ props.marginLeft + 20 }/>
})}
</div>
)
}
return (
<div>{ props.name }</div>
)
}
export default RecursiveChildren;
If children is provided in RecursiveChildren, so we call RecursiveChildren in RecursiveChildren, that's all.
That is it for now ;-)
Cheers!
Top comments (3)
Great article, you got my follow, keep writing!
this is a youtube vid where you can use typescript with React youtube.com/watch?v=o52SDWp0UHE