使用IntrospectionFragmentMatcher
解析界面时遇到了一些问题。我已经按照文档中的步骤进行操作,但是无法查询某些Interface片段中的字段。
我正在使用react-apollo
的{{1}} HOC来查询数据。
为了简单起见,我采用了基本的graphql
和frontpage-server
。
模式:
frontpage-react-app
解析器:
interface Entity {
id: Int!
}
interface Person {
firstName: String
lastName: String
}
type Author implements Entity, Person {
id: Int!
firstName: String
lastName: String
# ... other fields
}
type Post implements Entity {
id: Int!
# ... other fields
}
还有片段匹配器(请注意,我正在使用const resolveFunctions = {
Entity: {
__resolveType: obj => {
if (obj.author && obj.title) {
return 'Post';
}
// should have more logic
return 'Author';
},
},
Person: {
__resolveType: obj => {
// should have more logic
return 'Author';
},
},
// ... other resolvers
};
)
apollo-client@1.x
然后我修改查询以通过接口片段检索字段(尽管我知道在这种情况下以这种方式编写查询没有任何意义)。例如:
new ApolloClient({
networkInterface,
dataIdFromObject: r => r.id,
fragmentMatcher: new IntrospectionFragmentMatcher({
introspectionQueryResultData: {
__schema: {
types: [
{
kind: 'INTERFACE',
name: 'Entity',
possibleTypes: [
{ name: 'Author' },
{ name: 'Post' },
],
},
{
kind: 'INTERFACE',
name: 'Person',
possibleTypes: [
{ name: 'Author' },
],
}
],
},
}
}),
});
两个奇怪的事情在这里发生:
import { graphql } from 'react-apollo';
graphql(`
query allPosts {
posts {
... on Entity {
id
}
title
votes
author {
... on Entity {
id
}
... on Person {
firstName
lastName
}
}
}
}
`);
和id
都正确检索了字段posts
,但是author
和firstName
都没有(在我的项目中,我也有此不一致)。 HOC not providing the data
对于两个都没有数据的字段,我可以看到data is properly stored in the redux store,并且如果运行query in GraphiQL可以正常运行
你们知道是什么原因造成的吗?为了正确查询接口,我还需要做些其他事情吗?
提前谢谢!