javascript - React className 条件逻辑块从发生过渡,不知道为什么
问题描述
我正在尝试用 React 创建一个手风琴。我之前在 StackOverflow 上问过一个问题,即如何在单击时将类分配给手风琴并一次打开多个。有人将下面的代码沙箱链接到我,它将在点击时切换背景颜色。
https://codesandbox.io/s/nice-http-n0omm?file=/src/App.js
因此,我尝试将其放入我的代码中以打开和关闭手风琴,无论我做什么它都不会转换。这是一个即时的变化,我似乎无法弄清楚为什么。我也尝试过从蓝色到红色的背景颜色的过渡,同样的事情,它会立即改变而没有过渡。
有人可以查看我的代码并帮助解决吗?
我注意到代码沙箱和我的代码之间的唯一区别是,在沙箱版本上,在使用检查元素的 dom 上,当单击按钮时,只有选定的元素闪烁紫色(铬)以表示某些东西是改变了。在我的版本中,地图的每个实例都会闪烁紫色,表示所有映射出来的元素都受到了某种影响。
const [accordionOpen, setAccordionOpen] = useState([]);
function openAccordion(num) {
setAccordionOpen((state) => {
return state.includes(num)
? state.filter((n) => n !== num)
: [...state, num];
});
}
return parsedData.map((data) => {
<>
<div
className="mortgage_moreinfo"
onClick={() => openAccordion(data.ProductCode)}
key={data.ProductCode}
>
<p>More Info</p>
</div>
</>
})
SCSS
.accordionClosed {
transition: all 1s ease;
max-height: 0;
overflow: hidden;
transition: max-height 0.2s ease-out;
}
.accordionOpen {
max-height: 101px !important;
}
解决方案
为你的 scss 尝试这样的事情:
.accordion {
max-height: 0;
overflow: hidden;
transition: all 1s ease;
transition: max-height 0.2s ease-out;
}
.accordion.open {
max-height: 101px !important;
}
对于你的 React 组件:
<div className=`accordion ${ConditionForOpeningTheAccordion ? 'open' : ''}`>
</div>
所以你基本上有一个.accordion
类,它定义了手风琴的基本风格,但你的高度为 0px。当您打开手风琴的条件得到满足时,您正在将.open
类添加到宽度为 101 像素的手风琴中。这应该确保每次将.open
类删除或添加到手风琴时都会播放您的过渡。
希望我的解释对你有所帮助。如果没有,我可以提供一个代码框或类似的东西。
推荐阅读
- sql - 将数组作为 json 格式的密钥对传递给函数 pgsql
- javascript - 在 React 中渲染 Pokemon 双类型弱点/抗性
- c++ - 为什么我的代码不接受字母作为用户输入
- python - 找不到满足需求请求的版本(来自版本:无)错误:未找到请求的匹配分发
- html - 如何使用 iframe 自动播放本地视频?
- wordpress - 将 URL 映射到文件系统
- discord - 无法使用 add_reaction discord.py(错误代码:10014):未知表情符号
- python - NumPy 安装问题
- ios - iMessage App - 在消息中显示等宽文本(蓝色气泡)
- php - 我只想返回 isactive = 1 的用户