我在我的反应项目中使用 coreui,更具体地说 - appSideBarNav,我用它来表示文件夹。问题是文件夹可以嵌套,当文件夹(让它成为 A)有一个子文件夹(B)时,A 文件夹将成为 nav-dropdown。当您单击 A 文件夹时,您必须被重定向到 url/A,但 Dropdown 元素会被切换并且不会发生重定向。换句话说 - 您只能被没有任何子级的文件夹重定向。值得注意的是,所有文件夹都具有正确的 url 属性。另外,我将onClick函数传递给每个文件夹,以查看列表中单击后是否已触发,并且只有没有子文件夹的文件夹被单击后才触发onClick函数。
下面的代码示例表示使用文件夹填充 appSideBarNav 的递归函数:
const addFoldersToNav = (folders, sourceURL = '/mail/') => {
return (folders.map(item => {
console.log('creating and adding folder')
const folder = {
name: (item.Type == 10) ? item.Name : i18next.t(item.Name.toLowerCase() + '_folder'),
url: sourceURL + item.Name,
icon: folderTypes.get('' + item.Type),
// onClick: (console.log('wow')),
attributes: {
onClick: event => {
console.log('clicked')
event.nativeEvent.stopImmediatePropagation()
window.location = "#" + sourceURL + item.Name;
localStorage.setItem('Path', sourceURL + ':folderId/:selectedId?')
},
onToggle: () => { console.log('toggled') },
},
wrapper: {
element: <input onClick={console.log('wrapped')} />
},
notSeenAmount: 0,
id: inc++,
children: (item.SubFolders) ? addFoldersToNav(item.SubFolders['@Collection'], sourceURL + item.Name + '/') : null,
}
return folder
}))
}