javascript - 多级表行展开折叠反应
问题描述
我有对象的多级数组,所以如果键值是对象,则添加展开/折叠按钮,然后单击它,渲染行等等......
var cars = {
label: 'Autos',
subs: [
{
label: 'SUVs',
subs: []
},
{
label: 'Trucks',
subs: [
{
label: '2 Wheel Drive',
subs: []
},
{
label: '4 Wheel Drive',
subs: [
{
label: 'Ford',
subs: []
},
{
label: 'Chevrolet',
subs: []
}
]
}
]
},
{
label: 'Sedan',
subs: []
}
]
}
解决方案
我使用 reactjs 为您创建了一个演示,并围绕您的给定对象进行递归。
看看它,如果它对您的用例有帮助。你可以参考下面的代码来推断更多
import React from "react";
const cars = {
label: "Autos",
subs: [
{
label: "SUVs",
subs: []
},
{
label: "Trucks",
subs: [
{
label: "2 Wheel Drive",
subs: []
},
{
label: "4 Wheel Drive",
subs: [
{
label: "Ford",
subs: []
},
{
label: "Chevrolet",
subs: []
}
]
}
]
},
{
label: "Sedan",
subs: []
}
]
};
const generateRow = (rowData, open, setOpen) => {
const handleExpand = () => {
let set = new Set(open);
set.add(rowData.label);
setOpen(set);
};
const handleCollapse = () => {
let set = new Set(open);
set.delete(rowData.label);
setOpen(set);
};
return (
<div>
<p>
{rowData.label}
{rowData.subs.length > 0 && !open.has(rowData.label) && (
<button onClick={handleExpand}>↓</button>
)}
{rowData.subs.length > 0 && open.has(rowData.label) && (
<button onClick={handleCollapse}>↑</button>
)}
</p>
{rowData.subs.length > 0 && open.has(rowData.label) && (
<ul>
{rowData.subs.map((child) => {
return (
<li key={child.label}>{generateRow(child, open, setOpen)}</li>
);
})}
</ul>
)}
<ol></ol>
</div>
);
};
const App = () => {
// open state to keep trach of which labels are selected to be open or not
// use recursion to generate list on demand
const [open, setOpen] = React.useState(new Set());
return generateRow(cars, open, setOpen);
};
export default App;
推荐阅读
- php - 注意:使用未定义的常量 OK - 假定为“OK”
- qt - 使用 QTextStream 编写问题
- java - 设置 derby_home 和路径后尝试运行 sysinfo 时出错
- javascript - 如何使用 Loadash 获取 JSON 对象中嵌套字段的索引?
- networking - 无法打开 Google 或 Google Capthcas
- javascript - 防止在 this.setState 中使用 this.state (react/no-access-state-in-setstate)
- javascript - api返回一个字符串而不是JSON,我怎样才能让我的应用程序使用一个字符串呢?
- oracle - dbms_utility.exec_ddl_statement 不起作用
- ruby-on-rails - 如何使用 ActiveRecord 查询根据关联标签查找记录
- ssh - 从 Windows 10 到 Windows 10 端口 22 的 SSH 超时和密码问题