javascript - 保持第一个手风琴项打开
问题描述
我有一个 React Js 手风琴,当我单击一个项目时,面板打开,要关闭它你必须单击同一个项目或另一个项目,我需要保持第一个项目在开始时打开。
方法eventHandler获取手风琴每个项目的 id,这些项目是从 API 获取的,每次我单击一个项目时,我都会获取项目的 id,但是当组件挂载时,console.log(active)返回 null
我需要获取第一项的 id,因为第一个索引不会为 0,所以useState(0)无济于事,有什么想法吗?
这是我的代码:
const { active, setActive } = useContext(AccordionContext)
const eventHandler = (e, index) => {
e.preventDefault();
setActive(index !== active ? index : null);
}
return (
<div id={props.index}>
<button
onClick={(e) => eventHandler(e, props.index)}
aria-expanded={ active === props.index ? 'true' : 'false' }
aria-disabled={ active === props.index ? 'true' : 'false' }
>
<span>
{props.description}
</span>
</button>
<div>
<div toggle={active === props.index}></div>
</div>
</div>
)
这里是AccordionContext
const AccordionWrapper = (props) => {
const [active, setActive] = useState(null);
console.log(active)
return (
<AccordionContext.Provider
value={{
active, setActive
}}
>
<AccWrapper>
{props.children}
</AccWrapper>
</AccordionContext.Provider>
)
}
解决方案
推荐阅读
- sql - 我想知道我们在下面的转换中采用那些 256,.. 数字的具体原因
- python - 如何使用 selenium 和 Python 调用 send_keys()
- java - 如何将文件中的字节转换为java中的对象?
- scala - 我如何解决这些依赖警告
- algorithm - 加权储层采样初始化(A-Chao 实现)
- azure-devops - 无法在 Azure DevOps 中 @提及或分配工作项给其他用户
- c - 如何在 C 编程中用 0 填充我的二进制文件?
- excel - VBA Range.Find() 函数不适用于大浮点数
- r - 在 R Shiny 中检索客户端的系统时间,可能使用 Javascript
- sql - 使用 SQL 进行规范化