Field/Input 标签基于反应管理中的记录

Field/Input label based on record in react admin

我希望将部分记录包含在 BooleanField(和 BooleanInput)的标签中。我正在尝试使用 WithProps 来完成此操作。

如果我用

<BooleanField source="FileSystem" label="FileSystem" />

这似乎工作得很好。相反,如果我尝试包装它

const makeLabel = (props)=>{
    let label = `Filesystem for ${props.record.id}`;

    return {label};
}

const withLabel = withProps(makeLabel);
const BooleanFieldWithLabel = compose(withLabel)((props)=>{
    console.log("props after compose",props);
    return <BooleanField {...props}/>
});

然后使用<BooleanFieldWithLabel source="FileSystem" />它不渲染任何标签。我尝试了几种不同的方法,但似乎没有任何效果,即使我可以在 console.log 中看到正确的标签在 props 中。我在这里做错了什么?

我有同样的问题,我无法在"Show"页面上显示基于字段值的标签。 从 react-admin 源代码来看,似乎只有我在 "SimpleShowLayout" 或 "TabbedShowLayout" 的直接子级上设置 "addLabel" 道具,然后我才能在我的自定义字段上看到标签。

但它不可配置,我想 show/hide 根据字段的值进行标记。我是否需要实现自己的自定义 "SimpleShowLayout" 或 "TabbedShowLayout"?或者有什么更好的方法吗?

更新我的post。 我只是通过实施如下所示的 HOC 来找出解决方案。我想知道是否有更好的方法来实现相同的功能?

import React from "react";
    import get from "lodash/get";
    import { TextField, DateField, Labeled } from "react-admin";

    const NullableField = WrappedComponent => props => {
      const { record, source } = props;
      const value = get(record, source);
      return value ? (
        <Labeled {...props}>
          <WrappedComponent {...props} />
        </Labeled>
      ) : null;
    };
    const NullableTextField = NullableField(TextField);
    const NullableDateField = NullableField(DateField);
    export { NullableTextField, NullableDateField };