javascript - 使按钮在 React 中以手风琴形式向上滑动
问题描述
我在 React 中有一个带有向上/向下滑动内容的按钮的手风琴,就像这张图片一样
我做了一些功能组件,看起来像这样:
<SlideButtonContainer>
<SlideButton title="Title goes here">
Content goes here
</SlideButton>
<SlideButton title="Title goes here">
Content goes here
</SlideButton>
</SlideButtonContainer>
单击 a会SlideButton
调用一个handleClick
更改opened
组件状态的函数,使其内容在 上向上false
或向下滑动true
。
但是我怎样才能让所有其他SlideButtons
内部SlideButtonContainer
设置它们的状态opened
呢false
?
SlideButton
使用此 repo 中的 SlideDown,如下所示:
export default function SlideButton(props) {
const [opened, setOpened] = useState(false);
function handleClick() {
setOpened(!opened);
}
return (
<div className="slideButton">
<div className="slideButtonButton" onClick={handleClick}>
<div>
{props.title}
</div>
</div>
<div className="slideButtonContents">
<SlideDown>
{opened ? props.children : null}
</SlideDown>
</div>
</div>
);
}
SlideButtonContainer
只是一个样式化的 div
export default function SlideButtonContainer(props) {
return (
<div className="slideButtonContainer">
{ props.children }
</div>
);
}
解决方案
解决了。在SlideButtonContainer
我使用React.cloneElement
onrender
并将 refs 设置为它的孩子时,我可以在这个循环中使用孩子的函数:
for (var ref in this.refs) {
this.refs[ref].slideUp();
}
推荐阅读
- python - Pandas 多索引:如何将多索引(YYYY,MM)合并为单个(YYYY-MM)索引?
- android - 如何将 JSONarray 中的数据显示到 ListView
- ios - iOS - Xcode 自动管理签名不适用于 Ionic 4 Cordova 项目
- c++ - 作为类成员的模板参数函数
- java - Java spring将id传递给模板中的url
- sql - 在另一列中的一组行中选择一列的第一行
- c++ - 警告:扩展初始化列表仅适用于 -std=c++11 或 -std=gnu++11 [默认启用]
- node.js - 为什么在设置标头后,发送到 Heroku 上托管的 Sails.js 服务器的邮递员发布请求返回 cors 预检错误?
- javascript - 我遇到类型错误:无法读取未定义的属性“GoogleAuthProvider”?(React JS)Firebase?
- go - 如何验证无效的 unicode 代码点值?