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})),
我在 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})),