嵌套引用字段

jab*_*bst 4 react-admin

为了检索设备类型,我使用了一个将检索设备模型,然后另一个使用设备模型的字段“typeID”来引用设备类型来检索设备类型。

但是它显示以下警告:

警告:失败的道具类型:提供给 ReferenceField 的布尔类型的无效道具 translateChoice,预期功能。

图片表示数据模型(一个设备有一个设备模型,一个设备模型有一个设备类型)

在此处输入图片说明

小智 6

我发现更好的解决方案有点像黑客,但似乎更有效。

以问题示例为例,其中只需要获取设备类型<ReferenceField>,它会是这样的:

    const EquipList = ({...props}) => {
      <List {...props}>
        <Datagrid>

          <ReferenceFieldController label="Equipment Type" reference="equipmentModel" source="modelID" linkType={false}>
            {({referenceRecord, ...props}) => (
              <ReferenceField basePath="/equipmentModel" resource="equipmentModel" reference="equipmentType" source="typeID" record={referenceRecord || {}} linkType="show">
                <TextField source="name" />
              </ReferenceField>
            )}
          </RefenceFieldController>

        </Datagrid>
      </List>
    }
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,<ReferenceFieldController>获取设备的设备模型,例如<ReferenceField>。需要标签,因为 RA 使用第一个<ReferenceField>来显示 中的列标题<Datagrid>,如果您使用国际化,您应该将翻译功能应用于此道具上的正确资源。

<ReferenceController>获取记录并将其作为子函数传递,referenceRecord该子函数将为字段呈现呈现组件。您渲染 a<ReferenceField>以获取嵌套关系,然后显示该字段,而不是呈现字段组件。由于<ReferenceFieldController>仅将控制器道具传递给其子级,并且字段组件的道具不会在嵌套关系中执行您想要的操作,因此您必须将它们显式传递给<ReferenceField>. 你需要传递record<ReferenceField>作为referenceRecord || {},因为最初的referenceRecord不被取还和<ReferenceField>不与记录为空工作。

linkTypeof <ReferenceFieldController>设置为 false 使其不会呈现<Link>会将用户重定向到错误路由的组件。