【问题标题】:Field/Input label based on record in react admin基于反应管理中记录的字段/输入标签
【发布时间】:2019-05-18 00:11:18
【问题描述】:

我希望将部分记录包含在 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}/>
});

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

【问题讨论】:

    标签: reactjs react-admin recompose


    【解决方案1】:

    我有同样的问题,我无法在“显示”页面上显示基于字段值的标签。 从 react-admin 源代码来看,似乎只有我在“SimpleShowLayout”或“TabbedShowLayout”的直接子项上设置了“addLabel”属性,然后我可以在我的自定义字段上看到标签。

    但它是不可配置的,我想根据字段的值显示/隐藏标签。我是否需要实现自己的自定义“SimpleShowLayout”或“TabbedShowLayout”?或者有没有更好的方法?

    更新我的帖子。 我只是通过实现如下所示的 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 };

    【讨论】:

    • @raju_eww 感谢您的建议,我刚刚更新了我的代码。
    猜你喜欢
    • 1970-01-01
    • 2017-01-28
    • 2018-08-14
    • 1970-01-01
    • 2011-10-14
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    相关资源
    最近更新 更多