如何解决创建一个自定义的显示布局组件
我正在尝试创建一个自定义布局组件,以便可以更好地设计Show
页面。
我不确定为什么有些东西可以工作,而有些却不能。我的计划是使用Material-UI
<Grid>
组件。我知道Grid
组件不会传递道具,那么我将扩展为自己的道具:
export default function OrderShow(props) {
return (
<Show {...props}>
<CustomGrid>
<TextField source="shortId" label="Short ID" />
</CustomGrid>
</Show>
);
}
我的CustomGrid
组件(还只是草稿)正在克隆其子代以传递道具:
function CustomGrid(props) {
return React.Children.map(props.children,(child) => React.cloneElement(child,props));
}
当我使用它时,TextField
会收到source
,并正确呈现它。但是label
不见了。我不确定为什么会这样。
另一个问题是,当我尝试将CustomGrid
与ReferenceField
一起使用时,它根本不起作用:
<Show {...props}>
<CustomGrid>
<ReferenceField source="user" reference="users" label="Name" link="show">
<FunctionField render={(record) => `${record.firstName} ${record.lastName}`} />
</ReferenceField>
</CustomGrid>
</Show>
我可以看到道具一直传递到ReferenceField
,但在到达FunctionField
之前就丢失了:
是否有更好的方法来自定义SimpleShowLayout
并继续使用TextField
和react-admin
中的其他组件?
解决方法
是的,有办法。简单地说,react-admin
的{{1}}比将道具传递给子级字段更加复杂。这就是为什么您必须递归迭代直到到达某个字段并执行SimpleShowLayout
所要做的事情。
最后,我决定在我正在构建的新程序包中共享一些私有开发的组件。我添加了可与react-admin
和Box
Grid
的组件一起使用的布局。您可以在这里查看:ra-compact-ui
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。