[英]Mapping over an array of objects to generate React components based on the key value pairs
編輯:下面的解決方案都不適合我,因為在擺弄了 ido ben ami 的解決方案后,我開始使用它:
{
array.map(project =>
<Box>
<Typography variant="subtitle1" sx={{fontWeight: 'bold', ml: 2}}
value={Object.keys(project)[0]}>{Object.keys(project)[0]}</Typography>
{
Object.entries(project)[0][1].map(ticket =>
<MenuItem sx={{ml: 3}} value={ticket}>{ticket}</MenuItem>)
}
</Box>
)
}
我最初使用片段而不是 Box,但 Material UI 不喜歡 Select。如果我遺漏了這兩個中的一個,它就不起作用,因為生成的 2 個組件不相同。
來自我后端的數據是這樣的(項目/門票的數量明顯不同):
[
{
"Project 1": [
"Ticket 1",
"Ticket 2",
"Ticket 3",
]
},
{
"Project 2": [
"Ticket 4"
"Ticket 5"
"Ticket 6"
]
}
]
我需要 map 來為我的 Select 組件生成項目。 這是我想要的結果,但我不知道如何使用 Object.entries 或 Object.keys/Object.values 來實現:
<Typography variant="subtitle1" sx={{fontWeight: 'bold', ml: 2}} value="Project 1">Project 1</Typography>
<MenuItem sx={{ml: 3}} value="Ticket 1">Ticket 1</MenuItem>
<MenuItem sx={{ml: 3}} value="Ticket 2">Ticket 2</MenuItem>
<MenuItem sx={{ml: 3}} value="Ticket 3">Ticket 3</MenuItem>
<Typography variant="subtitle1" sx={{fontWeight: 'bold', ml: 2}} value="Project 2">Project 2</Typography>
<MenuItem sx={{ml: 3}} value="Ticket 4">Ticket 4</MenuItem>
<MenuItem sx={{ml: 3}} value="Ticket 5">Ticket 5</MenuItem>
<MenuItem sx={{ml: 3}} value="Ticket 6">Ticket 6</MenuItem>
嘗試這個
<Box>
{array.map((project, projectIndex) => (
<Box key={projectIndex}>
{console.log(Object.entries(project))}
<Typography
variant="subtitle1"
sx={{ fontWeight: 'bold', ml: 2 }}
value={Object.entries(project)[0][0]}>
{Object.entries(project)[0][0]}
</Typography>
{Object.entries(project)[0][1].map((ticket, ticketIndex) => (<MenuItem key={ticketIndex} sx={{ ml: 3 }} value={ticket}>{ticket}</MenuItem>))}
</Box>
))}
</Box>
但如果您有權在后端進行更改,我建議您像這樣保存數據:
[
{
"projectName": "Project 1"
"tickets": [
"Ticket 1",
"Ticket 2",
"Ticket 3",
]
},
{
"projectName": "Project 2"
"tickets": [
"Ticket 4"
"Ticket 5"
"Ticket 6"
]
}
]
你有一個對象數組。 在此對象中,您只有一個屬性。 該屬性是另一個字符串數組。
我不知道組件 Typography 到底在做什么,但是我的解決方案對您的代碼和優化很有用。 你可以嘗試這樣的事情:
在渲染組件之前(不是 JSX)
let backEndValue = [
{
"Project 1": [
"Ticket 1",
"Ticket 2",
"Ticket 3",
]
},
{
"Project 2": [
"Ticket 4",
"Ticket 5",
"Ticket 6",
]
}
]
const [title,setTitle] = useState('');
const [subTitle,setSubTitle] = useState('');
setProjects = [];
Object.keys(backEndValue).map((prop) => {
return setProjects.push(backEndValue[prop]);
})
setProjects.map((prop)=>{
const temp = Object.keys(prop);
const tempT = prop[temp];
setTitle(temp);
setSubTitle(tempT);
})
在渲染中 (JSX)
{
title.map((prop,index)=>{
return <Typography key={index} variant="subtitle1" sx={{fontWeight: 'bold', ml: 2}} value={prop}>{prop}</Typography>
})
}
{
subTitle.map((prop,index)=>{
return <MenuItem key={index} sx={{ml: 3}} value={prop}>{prop}</MenuItem>
})
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.