为了检索设备类型,我使用的是一个将检索设备模型,另一个使用设备模型的字段"typeID“引用设备类型来检索设备类型。
但是,它会显示以下警告:
警告:错误的道具类型:无效的道具translateChoice类型布尔型提供给ReferenceField,期望函数。
图像表示数据模型(设备有设备模型,设备模型有设备类型)。

发布于 2018-11-22 16:29:32
我发现一个更好的解决方案是一种黑客,但似乎更有效。
以<ReferenceField>,问题为例,为了获得equipmentType,只需要,它将如下所示:
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>
}在上面的示例中,<ReferenceFieldController>获取设备的equipmentModel,如<ReferenceField>。标签是必需的,因为RA使用第一个<ReferenceField>在<Datagrid>中显示列标题,如果您使用国际化,您应该将转换函数应用到这个支柱上的正确资源。
<ReferenceController>获取记录并将其作为referenceRecord传递给子函数,该子函数将呈现组件以供字段表示。而不是呈现字段组件,而是呈现一个<ReferenceField>来获取嵌套关系,接下来显示字段。由于<ReferenceFieldController>只将控制器道具传递给它的子组件,而且字段组件的道具不能在嵌套关系中执行您想要的操作,所以您必须将它们显式传递给<ReferenceField>。您需要将record of <ReferenceField>传递为referenceRecord || {},因为最初还没有获取referenceRecord,而且<ReferenceField>没有将记录作为null处理。
将linkType of <ReferenceFieldController>设置为false使其不会呈现将用户重定向到错误路由的<Link>组件。
发布于 2018-11-05 19:41:19
这并不是一个完美的解决方案,但是为了解决translateChoice问题,您可以创建一个包装器并提取出该支持,以防止它被传递。
const SubReference = ({ translateChoice, children, ...props }) => (
<ReferenceField {...props}>{children}</ReferenceField>
);在排除此问题时,我还收到了一个关于嵌套a标记的错误。我能够通过将linkType支柱设置为父ReferenceField中的false来沉默错误。
<ReferenceField source="item_id" reference="list" linkType={false}>
<SubReference source="id_to_reference_from_list" reference="second_list">
<TextField source="name" />
</SubReference>
</ReferenceField>发布于 2018-09-18 08:57:03
我也有同样的问题,我认为这是一个实际的错误。我评论了相应的github问题https://github.com/marmelab/react-admin/issues/2140
我查看了ReferenceField的代码,据我所知,这是一个实际的错误。ReferenceField希望为translateChoice属性提供一个函数,但在内部将布尔值传递给ReferenceFieldView。如果将一个ReferenceField嵌套到另一个中,则内部将接收false作为translateChoice属性,并理所当然地抱怨它是一个布尔函数而不是一个函数。
https://stackoverflow.com/questions/51747361
复制相似问题