javascript - 使用 React 和 Material UI 使用 Accordion 加载图像
问题描述
我有一个用 ui 材料制作的手风琴,每次打开手风琴选项卡时都需要加载不同的图像,但图像在手风琴之外,在另一个 div 中
这是当前代码:
export default function CustomizedExpansionPanels(
items,
id,
expanded,
setExpanded
) {
const handleChange = panel => (event, newExpanded) => {
setExpanded(newExpanded ? panel : false);
};
const { title, text, image } = items;
return (
<div>
<ExpansionPanel
expanded={expanded === `panel_${id}`}
onChange={handleChange(`panel_${id}`)}
>
<ExpansionPanelSummary
expandIcon={<ExpandMoreIcon />}
aria-controls={`panel_${id}d-content`}
id={`panel_${id}d-header`}
>
<Typography>{title}</Typography>
</ExpansionPanelSummary>
<Grid container spacing={5}>
<Grid item xs={12} sm={5}>
<ExpansionPanelDetails>
<Typography>{text}</Typography>
</ExpansionPanelDetails>
</Grid>
<Grid item xs={12} sm={7}>
<img
src={image}
alt=""
/>
</Grid>
</Grid>
</ExpansionPanel>
</div>
);
}
但是图片是在ExpansionPanel里面加载的,效果很奇怪,需要在外面加载,怎么办?
解决方案
一种可能的解决方案是添加条件代码以仅在图像展开时呈现图像。如果您移动<img>
外部<ExpansionPanel>
,您可以关闭您传递的扩展属性,并且仅在expanded === true
.
<ExpansionPanel>
[...]
</ExpansionPanel>
{expanded &&
<img />
}
我在这里用material-ui做了一个简单的例子Accordion
推荐阅读
- vuejs3 - 有没有办法在 vue 3 中使用 portal-vue 包
- reactjs - React Native:如何在 React Native 中使用 FileReader
- python - 带有填充的自定义 Matplotlib 图
- c# - 反序列化 JSON 并断言响应
- angular - 我想使用 mat-select 的值作为键和输入字段的值作为角度反应形式的键的值
- python - 使用openCV的线跟随器
- reactjs - react-dates - 关闭结束日期选择
- python - Flask render_template() 不会渲染 xhtml,但是当我手动打开它时它会在我的浏览器中正确渲染
- c++ - 将 4 字节整数写入 char* 数组
- c++ - 如何从另一个成员函数调用成员函数指针?