javascript - 单击另一个时保持手风琴项打开
问题描述
所以我有这个手风琴组件,它目前在点击时打开和关闭。但是当我点击例如第一个项目并打开它时,当我点击第二个项目时第一个关闭,而我想保持它打开。不知道我应该如何处理这个问题。
const [activeTab, setActiveTab] = React.useState(props.tabIndex);
const tabs = props.tabs.map((tab) => {
return (
<>
<TabContainer>
<Tab
key={tab.index}
onClick= {() => {activTab == tab.index ? setActiveTab(-1) : setActiveTab(tab.index)})
className={typeof tab.content === 'string' ? '' : 'unactive-tab'}
>
{tab.name}
</Tab>
</TabContainer>
{tab.index === activeTab ?
<div
id="content"
style={{ width: '100%', margin: '2rem 0' }}
dangerouslySetInnerHTML={{ __html: tab.content as string }}
/>
: null}
</>
);
});
解决方案
更改 props.tabIndex
为选项卡索引数组,而不仅仅是 1 个索引。
假设您现在通过 props 发送一组索引。例如 // props.tabIndexes = [1,5,2]
const [activeTabs, setActiveTabs] = React.useState(props.tabIndexes);
const tabs = props.tabs.map((tab) => {
return (
<>
<TabContainer>
<Tab
key={tab.index}
onClick= {() => {activeTabs.includes(tab.index) ? setActiveTabs(activeTabs.filter(tabIndex => tabIndex !== tab.index ) ) : setActiveTabs(activeTabs.push(tab.index)})
className={typeof tab.content === 'string' ? '' : 'unactive-tab'}
>
{tab.name}
</Tab>
</TabContainer>
{activeTabs.includes(tab.index) ?
<div
id="content"
style={{ width: '100%', margin: '2rem 0' }}
dangerouslySetInnerHTML={{ __html: tab.content as string }}
/>
: null}
</>
);
});
推荐阅读
- javascript - 使用纯 JavaScript [无 jQuery] 显示更多/显示更少的多个元素的切换按钮
- javascript - 如何让用户登录php网站后,只能查看他的个人资料
- postgresql - Alternative to @> '["TEXT"]' syntax
- websocket - 如何使用 webSocket 客户端 arduino 代码从 websocket 接收数据?
- php - mysqli_stmt::bind_param():变量数与准备语句错误中的参数数不匹配
- java - 如何检查我有多少绘制结果并显示它?
- jquery - 引用索引找到的元素中的元素
- python - 使用 Python 的 REST JSON 请求
- wordpress - 在自定义帖子的情况下,全局帖子包含页面而不是帖子
- c# - response.content.readasstringasync() 到对象