【发布时间】:2021-10-05 07:26:17
【问题描述】:
我在 React APP 中创建了一个切换导航。一切正常,除了开关。下面是切换的代码。如果 parentId 存在,我正在使用对 parentId 的检查,然后包含子 ID,它将打开切换。如果不存在,则添加主 Id,其中一个是子项中的 parentId。
问题是我的 parentId 已经存在,如果我点击切换按钮,它不会关闭旧的并显示新的和旧的。
const handleArrowClick = ( data: CoursesNav ) => {
const { id, parentId } = data;
let newtoggledMenus = [...toggledMenus];
if( parentId && newtoggledMenus.includes(parentId)){
if (newtoggledMenus.includes(id)) {
var index = newtoggledMenus.indexOf(id);
if (index > -1) {
newtoggledMenus.splice(index, 1);
}
} else {
newtoggledMenus.push(id);
}
settoggledMenus(newtoggledMenus);
}else{
settoggledMenus([id]);
}
};
我已经创建了下面给出的导航结构,其中在主要项目下添加了子项。
export const CourseMenu = ( book: Book ): CoursesNav[] => {
if( course ){
// Chapters from book
return book.chapters.map( c => {
return {
id: c.id,
name: c.name,
link: `/my-book/${course.id}/chapter/${c.id}/edit`,
parentId: c.id,
// get topics and put under children
children: c.topics.map( m => {
return {
id: m.id,
name: m.name,
link: `/my-book/${course.id}/chapter/${c.id}/topics/${m.id}/edit`,
parentId: c.id,
//get blocks and put under blocks
children: m.blocks.map( b => {
return {
id: b.id,
name: b.title,
link: `/my-book/${course.id}/chapter/${c.id}/topics/${m.id}/block/${b.id}/edit`,
parentId: m.id
}
})
}
})
}
});
}
}
添加导航逻辑只是为了向您展示我正在尝试创建的内容。 每个父母都有用于切换的按钮来显示子项目。如果任何子项再次有子项,则会显示切换。
只有我在打开和关闭正确的切换时有问题。现在,如果我打开它的所有子项,则现在在一个主要子项下,前一个子项不会关闭,因为它们正在使 parentId 处于 toggledMenu 状态,这是一个数字数组。
【问题讨论】:
-
你能用一些例子解释你的问题吗?事情还不清楚。
-
您能否将您的问题的工作示例发布为stackblitz.com?
标签: javascript reactjs