javascript - 为什么所有手风琴在 ReactJs 中切换在一起?
问题描述
当我点击+
按钮时我有手风琴然后所有手风琴一起打开这里有什么问题?
我的代码:-
const questions = [
{
id:1,
question: 'what is the react one',
answer: 'react is a javascript library for building user interfaces for UI components'
},
{
id:2,
question: 'what is the react two',
answer: 'react is a javascript library for building user interfaces for UI components'
},
{
id:3,
question: 'what is the react two',
answer: 'react is a javascript library for building user interfaces for UI components'
},
{
id:4,
question: 'what is the react two',
answer: 'react is a javascript library for building user interfaces for UI components'
},
{
id:5,
question: 'what is the react two',
answer: 'react is a javascript library for building user interfaces for UI components'
},
{
id:6,
question: 'what is the react two',
answer: 'react is a javascript library for building user interfaces for UI components'
},
];
const Accordion = () => {
const [data, setData] = React.useState(questions);
const [show, setShow] = React.useState(false);
return (
<React.Fragment>
<div style={{ padding: "50px" }}>
<h2>Arrordion</h2>
{data.map((curElem) => {
return (
<div>
<div className="main-heading">
<p
style={{ cursor: "pointer" }}
onClick={() => setShow(!show)}
>
+
</p>
<h3>{curElem.question}</h3>
</div>
{show && <p> {curElem.answer}</p>}
<hr />
</div>
);
})}
</div>
</React.Fragment>
);
};
ReactDOM.render(<Accordion/>, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.2/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"></script>
<div id="root"></div>
谢谢你!
解决方案
问题在于状态。当您单击任何手风琴时,状态将变为真,并且由于您在所有手风琴上使用了相同的状态,所有这些都变为真并因此打开。
解决方案可能是将您的状态定义为一个数组:
const [show, setShow] = useState([])
你的功能可能是这样的;
{data.map((curElem, i ) => {
return (
<div>
<div className="main-heading">
<p
style={{ cursor: "pointer" }}
onClick={() => setShow(prevState => prevState[i] = !prevState[i])}
>
+
</p>
<h3>{curElem.question}</h3>
</div>
{show[i] && <p> {curElem.answer}</p>}
<hr />
</div>
);
})}
推荐阅读
- php - 我可以直接在 vps 服务器上上传我的 php 代码吗?
- javascript - 图像未按其定义显示
- mysql - Xampp mysql服务器突然无法启动
- terminal - Papermill 与 Cronjob:错误:papermill 是一个目录,找不到文件路径
- c++ - 如何检查 unique_ptr 是否指向此
- java - 如何避免 Gradle Exec 在 Windows 上的命令行中扩展通配符?
- nuxt.js - ReferenceError: $nuxt 未定义
- java - 在java上使用贝塞尔曲线创建动画
- android - 颤动如何检查在启动画面中是否授予了位置权限
- r - 根据第二个数据帧 R 中的值将数据帧中的单元格转换为 0