react-admin-graphql数据提供程序:如果graphqlapi只支持GET\u-ONE,如何实现GET\u-MANY?
如果graphql API仅支持等效的“获取一个”,如何在react admin的“ra数据图形SQL”包中实现“获取多个”数据提供程序函数 我理解如何通过等待解析API调用的所有承诺来使用REST完成此操作,但是这里从react-admin-graphql数据提供程序:如果graphqlapi只支持GET\u-ONE,如何实现GET\u-MANY?,graphql,react-admin,Graphql,React Admin,如果graphql API仅支持等效的“获取一个”,如何在react admin的“ra数据图形SQL”包中实现“获取多个”数据提供程序函数 我理解如何通过等待解析API调用的所有承诺来使用REST完成此操作,但是这里从buildQuery返回的应该是一个对象,该对象具有用于GraphQL查询的键,以及用于解析响应的函数的键 那么,在我们从数据提供程序返回结果之前,如何支持多个GraphQL查询,每个ID对应一个我们想要获取的ID呢?我遇到了同样的问题,并用这样的模式解决了这个问题:(在用户过滤
buildQuery
返回的应该是一个对象,该对象具有用于GraphQL查询的键,以及用于解析响应的函数的键
那么,在我们从数据提供程序返回结果之前,如何支持多个GraphQL查询,每个ID对应一个我们想要获取的ID呢?我遇到了同样的问题,并用这样的模式解决了这个问题:(在
用户过滤器中查看{ID:[ID]}
,这很重要)
@kurtko很抱歉没有及时回复。现在检查一下。找到了一个不需要更改GQL模式的变通方法(因为这是一个我无法更改的外部API)。
您需要更改ra数据图ql
。基本上,您需要允许多个GQL查询,然后等待所有承诺解决并返回组合结果。通过使用query
或querys
可以指示ra data graphql运行单个或多个GQL查询。我修改index.js如下:
// GRAPHQL QUERY
if (operation === 'query') {
if (!query.queries) {
// single GraphQL query
const apolloQuery = {
...query,
fetchPolicy: 'network-only',
...getOptions(otherOptions.query, aorFetchType, resource),
};
return client
.query(apolloQuery)
.then((response) => parseResponse(response))
.catch((error) => Promise.reject(error.message));
} else {
// multiple GraphQL queries
const prs = query.variables.map((variables) => {
const { queries, ...rest } = query;
const apolloQuery = {
...rest,
query: queries,
variables,
fetchPolicy: 'network-only',
...getOptions(otherOptions.query, aorFetchType, resource),
};
return client.query(apolloQuery);
});
return Promise.all(prs)
.then((responses) => parseResponse(responses))
.catch((error) => Promise.reject(error.message));
}
}
你找到解决办法了吗?
// GRAPHQL QUERY
if (operation === 'query') {
if (!query.queries) {
// single GraphQL query
const apolloQuery = {
...query,
fetchPolicy: 'network-only',
...getOptions(otherOptions.query, aorFetchType, resource),
};
return client
.query(apolloQuery)
.then((response) => parseResponse(response))
.catch((error) => Promise.reject(error.message));
} else {
// multiple GraphQL queries
const prs = query.variables.map((variables) => {
const { queries, ...rest } = query;
const apolloQuery = {
...rest,
query: queries,
variables,
fetchPolicy: 'network-only',
...getOptions(otherOptions.query, aorFetchType, resource),
};
return client.query(apolloQuery);
});
return Promise.all(prs)
.then((responses) => parseResponse(responses))
.catch((error) => Promise.reject(error.message));
}
}