admin-on-rest:在 Datagrid 组件中访问行的列数据

admin-on-rest: Access row's column data within a Datagrid component

我有一个 List 视图,我想在其中根据 Datagrid table 中呈现的当前行的值呈现 ReferenceField 字段组件创建。

如何访问当前行的数据? (当前行的列的值)。

我试过 record.processed 但我收到一条错误消息,指出记录对象不存在(processed 是记录中的一列,我想检查它以便格式化该字段) .我也尝试了 resource.processedthis.props.processedthis.props.record.processed,但都没有成功。

显示我正在尝试执行的操作的代码如下:

<List title="Sales Inquiries" filter={{ request_type: 'sales' }}  {...props}>
      <Datagrid>
          <TextField source="id" />
          <TextField source="firstname" label="First Name" />
          <TextField source="lastname" label="Last Name" />
          <TextField source="company" />
          <TextField source="email" />
          <DateField source="timestamp" label="Received" />

          {record.processed ?
            <ReferenceField label="Processed By" source="processedBy_id" reference="Users">
              <TextField source="username" />
            </ReferenceField>
          : <span>Nobody</span> }

          <ShowButton />
      </Datagrid>
  </List>

编辑

按照@kunal pareek 的建议将 HOC 应用于修改它的 ReferenceField 字段,以便显示正确的内容,如下所示:

const CustomField = (props) => (
  <span>
    {props.record.processed ?
      <ReferenceField label="Processed By" source="processedBy_id" reference="Users">
        <TextField source="username" />
      </ReferenceField>
    : <span>Nobody</span> }
  </span>
);

记录在您想要作为变量的位置并不真正可用。它作为道具传递给组件。

所以你可以做到这一点。

<List title="Sales Inquiries" filter={{ request_type: 'sales' }}  {...props}>
      <Datagrid>
          <TextField source="id" />
          <TextField source="firstname" label="First Name" />
          <TextField source="lastname" label="Last Name" />
          <TextField source="company" />
          <TextField source="email" />
          <DateField source="timestamp" label="Received" />
          <CustomField />

          <ShowButton />
      </Datagrid>
  </List>

const CustomField = (props) => (
          {props.record.processed ?
            <ReferenceField label="Processed By" source="processedBy_id" reference="Users">
              <TextField source="username" />
            </ReferenceField>
          : <span>Nobody</span> }
)

以上只是一个简单的例子。我已经直接使用了您的代码并重新格式化了它,因此它可能无法立即运行。但是我一直在使用这种方法在几个地方更改我的组件的值。

您也可以使用 HOC。您可以在此处找到示例

https://marmelab.com/admin-on-rest/Theming.html

dependent-input 插件可以帮助您。