我编写了一个 React 组件,它将在网格中呈现 Material UI Cards。一排会有4张牌。如果卡的总数可以被 4 整除,那么这不是问题,但是如果不能被 4 整除,我如何添加条件来检查和渲染卡。我正在编写函数来渲染 3 张卡、2 张卡或 1 张卡,具体取决于最后还剩下什么。
这是我的 React 代码,我需要优化以呈现网格中的元素。
export default function NestedGrid(props) {
const classes = useStyles();
const items = [];
function returnFourCards(i) {
return (
<Grid
container
item
xs={12}
spacing={3}
className={classes.gridContainer}
>
<React.Fragment>
<Grid item xs={3}>
<Link
to={"/updategroup/" + props.groupList[i].Number}
className={classes.linkStyle}
>
<GroupsCard
AD_groups={props.groupList[i].AD_groups}
Team={props.groupList[i].Number}
Owner={props.groupList[i].Owner}
Email={props.groupList[i].Email}
Name={props.groupList[i].Name}
/>
</Link>
</Grid>
{console.log(i++)}
<Grid item xs={3}>
<Link
to={"/updategroup/" + props.groupList[i].Number}
className={classes.linkStyle}
>
<GroupsCard
AD_groups={props.groupList[i].AD_groups}
Team={props.groupList[i].Number}
Owner={props.groupList[i].Owner}
Email={props.groupList[i].Email}
Name={props.groupList[i].Name}
/>
</Link>
</Grid>
{console.log(i++)}
<Grid item xs={3}>
<Link
to={"/updategroup/" + props.groupList[i].Number}
className={classes.linkStyle}
>
<GroupsCard
AD_groups={props.groupList[i].AD_groups}
Team={props.groupList[i].Number}
Owner={props.groupList[i].Owner}
Email={props.groupList[i].Email}
Name={props.groupList[i].Name}
/>
</Link>
</Grid>
{console.log(i++)}
<Grid item xs={3}>
<Link
to={"/updategroup/" + props.groupList[i].Number}
className={classes.linkStyle}
>
<GroupsCard
AD_groups={props.groupList[i].AD_groups}
Team={props.groupList[i].Number}
Owner={props.groupList[i].Owner}
Email={props.groupList[i].Email}
Name={props.groupList[i].Name}
/>
</Link>
</Grid>
{console.log(i++)}
</React.Fragment>
</Grid>
);
}
function returnThreeCards(i) {
return (
<Grid container item xs={12} spacing={3}>
<React.Fragment>
<Grid item xs={3}>
<Link
to={"/updategroup/" + props.groupList[i].Number}
className={classes.linkStyle}
>
<GroupsCard
AD_groups={props.groupList[i].AD_groups}
Team={props.groupList[i].Number}
Owner={props.groupList[i].Owner}
Email={props.groupList[i].Email}
Name={props.groupList[i].Name}
/>
</Link>
</Grid>
{console.log(i++)}
<Grid item xs={3}>
<Link
to={"/updategroup/" + props.groupList[i].Number}
className={classes.linkStyle}
>
<GroupsCard
AD_groups={props.groupList[i].AD_groups}
Team={props.groupList[i].Number}
Owner={props.groupList[i].Owner}
Email={props.groupList[i].Email}
Name={props.groupList[i].Name}
/>
</Link>
</Grid>
{console.log(i++)}
<Grid item xs={3}>
<Link
to={"/updategroup/" + props.groupList[i].Number}
className={classes.linkStyle}
>
<GroupsCard
AD_groups={props.groupList[i].AD_groups}
Team={props.groupList[i].Number}
Owner={props.groupList[i].Owner}
Email={props.groupList[i].Email}
Name={props.groupList[i].Name}
/>
</Link>
</Grid>
{console.log(i++)}
</React.Fragment>
</Grid>
);
}
function returnTwoCards(i) {
return (
<Grid container item xs={12} spacing={3}>
<React.Fragment>
<Grid item xs={3}>
<Link
to={"/updategroup/" + props.groupList[i].Number}
className={classes.linkStyle}
>
<GroupsCard
AD_groups={props.groupList[i].AD_groups}
Team={props.groupList[i].Number}
Owner={props.groupList[i].Owner}
Email={props.groupList[i].Email}
Name={props.groupList[i].Name}
/>
</Link>
</Grid>
{console.log(i++)}
<Grid item xs={3}>
<Link
to={"/updategroup/" + props.groupList[i].Number}
className={classes.linkStyle}
>
<GroupsCard
AD_groups={props.groupList[i].AD_groups}
Team={props.groupList[i].Number}
Owner={props.groupList[i].Owner}
Email={props.groupList[i].Email}
Name={props.groupList[i].Name}
/>
</Link>
</Grid>
{console.log(i++)}
</React.Fragment>
</Grid>
);
}
function returnOneCard(i) {
return (
<Grid container item xs={12} spacing={3}>
<React.Fragment>
<Grid item xs={3}>
<Link
to={"/updategroup/" + props.groupList[i].Number}
className={classes.linkStyle}
>
<GroupsCard
AD_groups={props.groupList[i].AD_groups}
Team={props.groupList[i].Number}
Owner={props.groupList[i].Owner}
Email={props.groupList[i].Email}
Name={props.groupList[i].Name}
/>
</Link>
</Grid>
{console.log(i++)}
</React.Fragment>
</Grid>
);
}
for (let i = 0; i < props.groupList.length; ) {
let cardContent;
if (props.groupList.length - i >= 4) {
cardContent = returnFourCards(i);
i += 4;
} else if (props.groupList.length - i === 3) {
cardContent = returnThreeCards(i);
i += 3;
} else if (props.groupList.length - i === 2) {
cardContent = returnTwoCards(i);
i += 2;
} else if (props.groupList.length - i === 1) {
cardContent = returnOneCard(i);
i += 1;
}
items.push(cardContent);
}
return (
<div className={classes.root}>
<Grid container spacing={1}>
{items.map((item) => item)}
</Grid>
</div>
);
}
此代码有效,但未优化。我想学习一种有效的方法来写这个。