考虑参考实现的主要SWAPI示例:https://github.com/graphql/swapi-graphql
// film.js
import PersonType from './person';
// person.js
import FilmType from './film';
到处都是。这些循环代表是否可以接受?是否有任何好的模式可以避免这种情况?在GraphQL的最终演示中包含有问题的实践似乎很糟糕。
答案 0 :(得分:3)
对于GraphQL来说,实践并不差,他们甚至为这种情况准备了解决方案。如果定义某种类型的fields
属性,则可以将其声明为函数
const User = new GraphQLObjectType({
name: 'User',
fields: () => ({
id: { type: GraphQLID }
// other attributes
})
});
graphql-js
使用名为resolveThunk
的方法来处理fields
属性,其实现如下
function resolveThunk<T>(thunk: Thunk<T>): T {
return typeof thunk === 'function' ? thunk() : thunk;
}
如您所见,它会检查thunk
(本例中的字段)是否有效。如果是,则返回它的结果,否则返回thunk本身。