react-admin dataprovider 指定一个自定义字段作为主键 - 一个未命名的字段 "id"

react-admin dataprovider specify a custom field as primary key - a field that is not named "id"

我在 react-admin 中使用 hasura 数据提供程序 ra-data-hasura(但我确信它或多或少与 ra-data-graphql 相同)

我的实体的主键名称与 id 不同 是否可以将未命名的字段设置为主要字段 id 例如:MyEntityId

是否可以逐个资源指定它(因为每个 table 可以有自己的名称模式)或全局指定它

可以 customize the cache IDs using the keyFields for each type in the typePolicies option of the InMemoryCache constructor:

const client = new ApolloClient({
  ...
  cache: new InMemoryCache({
    typePolicies: {
      MyEntity1: {
        keyFields: ["MyEntityId"],
      },
      MyEntity2: {
        keyFields: ["MyEntityId"],
      },
      ...
    }
  }),
  ...
})

buildHasuraProvider({ client });

亚历克斯, 你在文档中有这个答案:https://marmelab.com/react-admin/FAQ.html#can-i-have-custom-identifiersprimary-keys-for-my-resources

您必须在 dataProvider 级别解决此问题。 您必须实现自己的数据提供者的方法,将您的 MyEntityId 字段映射到 react-admin.

所需的 id 字段

例如(实现getList方法):

const myDataProvider = {
    getList: (resource, params) => {
        return fetch(API_URL)
               .then(({ json }) => ({
                    data: json.map((record) => ({ id: record.MyEntityId, ...record })),
                    total: parseInt(json.total, 10),
                })
        );
    }
   //...
}
json.map(record => ({"id": record.userID, ...record})),