面试题答案
一键面试思路
- 数据处理:将JSON数据结构作为组件的初始状态或通过props传入。
- 组件设计:创建一个目录树组件,使用递归方式渲染每个节点。
- 状态管理:为每个节点添加一个状态来记录其展开或收起状态,通过点击事件改变该状态。
关键代码片段
import React, { useState } from 'react';
const TreeNode = ({ node }) => {
const [isExpanded, setIsExpanded] = useState(false);
const toggleExpand = () => {
setIsExpanded(!isExpanded);
};
return (
<div>
<div onClick={toggleExpand}>
{node.name}
{node.children && (
<span>{isExpanded ? '[-]' : '[+]'}</span>
)}
</div>
{isExpanded && node.children && (
<div>
{node.children.map((child, index) => (
<TreeNode key={index} node={child} />
))}
</div>
)}
</div>
);
};
const DirectoryTree = ({ data }) => {
return (
<div>
<TreeNode node={data} />
</div>
);
};
export default DirectoryTree;
使用时,传入JSON数据结构:
import React from 'react';
import DirectoryTree from './DirectoryTree';
const jsonData = { name: 'root', children: [{ name: 'child1', children: [{ name: 'grandchild1' }] }] };
const App = () => {
return (
<div>
<DirectoryTree data={jsonData} />
</div>
);
};
export default App;