Admin-On-Rest - ReferenceField 进行多个查询而不是文档中所写的重复数据删除查询

Admin-On-Rest - ReferenceField making multiple queries instead of Deduplicated queries as written in docs

我正在创建一个显示一些帖子的编辑器字段

下面的代码

export const EditorView = (props) => {
  return (
    <List {...props} title="Fresh Tales">
      <Datagrid>
        <TextField source="id" />
        <TextField source="text" />
        <ReferenceField label="Writer" source="writerId" reference="writers">
          <TextField source="name" />
        </ReferenceField>
      </Datagrid>
    </List>
  )
}

参考字段的文档here

建议 referenceField 去重 API 查询,而我在模拟 API 上看到的每个查询都是。这里有两个问题。

1) 每个查询都进行了两次 - 一次使用 OPTIONS,一次使用 GET

2) ReferenceField 中的每个编写器资源都通过对编写器的单个查询获取。

OPTIONS /tales?_sort=ID&_order=ASC&_start=0&_end=10 204 0.168 ms - -
GET /tales?_sort=ID&_order=ASC&_start=0&_end=10 304 2.130 ms - -
OPTIONS /writers/312 204 0.148 ms - -
OPTIONS /writers/314 204 0.153 ms - -
OPTIONS /writers/316 204 0.190 ms - -
OPTIONS /writers/318 204 0.226 ms - -
OPTIONS /writers/320 204 0.116 ms - -
OPTIONS /writers/322 204 0.118 ms - -
OPTIONS /writers/324 204 0.142 ms - -
OPTIONS /writers/330 204 0.135 ms - -
OPTIONS /writers/340 204 0.122 ms - -
OPTIONS /writers/350 204 0.129 ms - -
GET /writers/312 304 1.769 ms - -
GET /writers/314 304 0.884 ms - -
GET /writers/316 304 4.023 ms - -
GET /writers/318 304 2.928 ms - -
GET /writers/320 304 0.759 ms - -
GET /writers/322 304 1.126 ms - -
GET /writers/324 304 1.040 ms - -
GET /writers/330 304 1.687 ms - -
GET /writers/340 304 0.653 ms - -
GET /writers/350 304 0.771 ms - -

这看起来相当繁重和浪费。将每个编写器加载到视图上是一个新请求。不知道是我错了还是文档错了。

您看到 OPTIONSGET 请求的事实是 CORS(跨源资源共享 - google 该术语)的影响,如果您的 API 和管理员不在同一个域中。

至于如果您的 API 支持,则将所有呼叫组合为一个,您有责任在 restClient 中执行此操作。

您可能正在使用不支持此选项的自定义 REST 客户端或 jsonServerRestClient

例如,这是如何完成的 in the simpleRestClient:

    case GET_MANY: {
        const query = {
            filter: JSON.stringify({ id: params.ids }),
        };
        url = `${apiUrl}/${resource}?${queryParameters(query)}`;
        break;
    }