gpt4 book ai didi

javascript - 如何在侧边栏中制作可折叠列表

转载 作者:太空狗 更新时间:2023-10-29 12:29:51 25 4
gpt4 key购买 nike

我正在尝试在侧边栏中制作可折叠列表。单击我正在更改“isOpen”状态,并根据此状态显示或隐藏子链接。问题是所有子链接同时打开。

在此处检查沙箱:https://codesandbox.io/s/infallible-moore-h16g6

const Sidebar = ({ title, children, data, opened, ...attrs }) => {
const [isOpen, setTriger] = useState(false);
const handleClick = idx => {
setTriger(!isOpen)
};

return (
<SidebarUI>
{data.map((item, idx) => {
return typeof item.data === "string" ?
<div key={idx} >{item.name}</div>:
<Fragment key={idx}>
<div onClick={() => handleClick(idx)}>{item.name}</div>
{ item.data.map((subs, ids) => {
return <Test isOpen={isOpen} key={ids}>++++{subs.name}</Test>;
})}
</Fragment>
})}
</SidebarUI>
);
};

最佳答案

尝试用折叠元素的状态创建一个对象,如下所示:

const Sidebar = ({ title, children, data, opened, ...attrs }) => {
const [collapseElements, setCollapse] = useState({});

const handleClick = idx => {
const currentElements = Object.assign({}, collapseElements);

setCollapse({ ...currentElements, [idx]: !collapseElements[idx] });
};

return (
<SidebarUI>
{data.map((item, idx) => {
return typeof item.data === "string" ? (
<div key={idx}>{item.name}</div>
) : (
<Fragment key={idx}>
<div onClick={() => handleClick(idx)}>{item.name}</div>

{item.data.map((subs, ids) => {
return (
<Test isOpen={collapseElements[idx]} key={ids}>
++++{subs.name}
</Test>
);
})}
</Fragment>
);
})}
</SidebarUI>
);
};
export default Sidebar;

结帐 the sandbox .

如果有帮助,请告诉我。

关于javascript - 如何在侧边栏中制作可折叠列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56790969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com