我以前已经无数次使用过map函数,但这次的问题让我感到困扰。
- 我有一个手风琴组件,它通过map函数遍历图表标题,以便我可以选择自己想要的图表——这部分功能正常。
- 当我选择一个图表后,它会在旁边的查看器中显示出来——这部分也正常工作。
- 如果我想将选中的图表保存到我的
pinnedcharts
集合中,只需点击图钉图标,它就会被添加到pinnedcharts
数组中——这部分在某种程度上也能工作。
问题:
如果你检查控制台,会发现pinnedcharts
数组实际上包含了不同(已固定)的图表(取决于你固定了多少个)。但在屏幕上显示的所有图表都是当前图表,而非各自不同的图表。
为了更好地理解这个问题,建议直接查看下面提供的CodePen链接。以下是相关的映射代码片段:
{pinnedcharts.map((chart, index) => {
return (
<Grid item md={6} key={index}>
<Box>
<CardContent>
<Box>
<Grid
container
spacing={2}
direction="row"
justifyContent="space-between"
alignItems="center"
>
<Grid item xs>
<Typography variant="h5">
{chart.title}
</Typography>
</Grid>
<Grid item xs={1}>
<IconButton
color="primary"
size="small"
onClick={handlePinnedPin}
>
{pinned ? <LuPin /> : <LuPinOff />}
</IconButton>
</Grid>
</Grid>
{/* 这里应该是从chart对象中获取数据 */}
<Line options={options} data={wbrdata} /> {/* {chart.wbrdata} 无法正常工作 */}
</Box>
</CardContent>
</Box>
</Grid>
);
})}
在<Line>
组件的data
属性处使用{chart.wbrdata}
时出错,这是因为不能直接对它进行映射。这确实说得通,因为wbrdata
是一个对象而非数组。然而,在查看器中,虽然wbrdata
能正常工作,那是因为图表库(Chart.js)知道如何根据其内部结构来选择wbrdata
内的数据集。
可以看到标题和Id都正确地映射出来了,但是数据集部分没有正确映射。
非常感谢任何提前提供的帮助。
CodePen 链接