javascript - 条件渲染无法正确显示我的数据
问题描述
我有一个组件可以在名为 UserRow 的材料 UI 表上显示数据。
该组件用于另一个名为 users 的组件。
但是为了在每个字段中正确显示数据,我发现的唯一方法是创建条件渲染,这样我就可以在每个字段中渲染我想要的数据,否则它会被复制。
有没有办法只调用一次<UserRow/>
组件并获得与下图中相同的结果?
用户行:
export default function UserRow( props, {name, details}) {
const style = styles();
function UserName(props) {
const showUserRow = props.showUserRow;
if (showUserRow) {
return <ListItem>
<ListItemIcon >
<PeopleIcon className={style.iconColor}/>
</ListItemIcon>
<ListItemText className={style.text}>{props.userRow}</ListItemText>
</ListItem>
}
return<div></div>;
}
function IconDetails(props) {
const showDetailsRow = props.showDetailsRow;
if (showDetailsRow) {
return <Link to={`/users/${props.detailsRow}`}>
<ListItemIcon >
<ListAltIcon className={style.iconColor}/>
</ListItemIcon>
</Link>;
}
return<div></div>;
}
return (
<List>
<ListItem>
<UserName userRow={props.name} showUserRow={props.showUserRow}/>
<IconDetails detailsRow={props.details} showDetailsRow={props.showDetailsRow}/>
</ListItem>
</List>
)
}
用户:
export default function User({ data }) {
const style = styles();
const userList = data.map((row) => {
return { name: row, details: row };
});
const [state] = React.useState({
users: [
...userList,
]
});
return (
<div>
<MaterialTable
icons={tableIcons}
title={<h1 className={style.title}>Users</h1>}
columns={[
{
title: "Name",
field: "name",
render: rowData => (
<UserRow showUserRow={true} showDetailsRow={false} name={rowData.name} />
)
},
{
title: "Details",
field: "details",
render: rowData => (
<UserRow showUserRow={false} showDetailsRow={true} details={rowData.details} />
)
},
]}
data={state.users}
options={{
search: true
}}
/>
</div>
)
}
我以前有什么:
用户行:
export default function UserRow( props, {name, details}) {
const style = styles();
return (
<List>
<ListItem>
<ListItemIcon >
<PeopleIcon className={style.color}/>
</ListItemIcon>
<ListItemText className={style.text}>{name}</ListItemText>
<Link to={`/users/${details}`}>
<ListItemIcon >
<ListAltIcon className={style.iconColor}/>
</ListItemIcon>
</Link>
</ListItem>
</List>
)
}
用户:
return (
<div>
<MaterialTable
icons={tableIcons}
title={<h1 className={style.title}>Users</h1>}
columns={[
{
title: "Name",
field: "name",
render: rowData => (
<UserRow name={rowData.name} details={rowData.details} />
)
},
{
title: "Details",
},
]}
data={state.users}
options={{
search: true
}}
/>
</div>
)
}
这里的问题,在之前的解决方案中,如果我们创建一个标题Details,material-ui表会为details创建一个div,我不能把我的图标放在那里,如果我有更多的数据,这将是一个问题并需要将数据放在相应的位置。
我试图用以前的解决方案实现的是减少一些代码,因为如果我有很多字段,我会重复太多代码。
解决方案
推荐阅读
- java - 如何使用代码中的新螺栓更新现有的 Storm 拓扑?
- javascript - 滚动元素以锚定屏幕高度的 75%
- css - 通过 css-loader 和 Webpack 在 React 中使用字符串类名
- php - 使用受保护的方法注入类实例
- facebook - 使用自定义设计在网站上显示 Facebook 页面帖子
- android - 后压在 SaleForce 登录屏幕中不起作用
- oracle - ELSE IF 不能在 PL/SQL 中工作
- sas - SAS:分钟经过计算
- google-app-engine - 可以让单个实例运行 24 小时而不使用 GAE 上的免费 28 小时
- python - Kivy 视频播放器 - 视频未加载