中继现代片段错误(期望对象包含数据....)
Posted
技术标签:
【中文标题】中继现代片段错误(期望对象包含数据....)【英文标题】:Relay Modern fragment error (expect object to contain data....) 【发布时间】:2018-11-10 14:58:14 【问题描述】:我正在使用 Relay 和 django-graphene 版本 2。Country.js 正在呈现国家/地区的 av 列表。
使用片段我得到这个错误:
警告:RelayModernSelector:预期对象包含片段Country_country
的数据,得到"node":"__fragments":"Country_country":,"__id":"Q291bnRyeVR5cGU6MQ=="
。确保父操作/片段包含片段...Country_country
没有@relay(mask: false)
。
QueryRenderer 返回正确的国家列表,不带 Country_country,只需输入变量名。
<QueryRenderer
environment=environment
query=graphql`query CartContainerQuery
viewer
id
countries(first: 3)
edges
node
...Country_country
pageInfo
startCursor
endCursor
`
variables=
render=(error, props) =>
if (error)
console.log(error)
return <div>Error!</div>;
if (!props)
return <div>Loading...</div>;
return (
<div>
console.log(props)
<Country country=props.viewer.countries.edges />
</div>
);
/>
我在 Contry Container 上的片段:
export default createFragmentContainer(
Country,
graphql`
fragment Country_country on CountryType @relay(plural: true)
id
name
`
)
石墨烯架构:
class CountryType(DjangoObjectType, model=Country):
class Meta:
interfaces= (relay.Node,)
filter_fields = ['name', 'id']
class Viewer(graphene.ObjectType):
class Meta:
interfaces = [relay.Node, ]
countries = DjangoFilterConnectionField(CountryType)
country = graphene.List(CountryType)
def resolve_country(self, info, **kwargs):
return Country.objects.all()
def resolve_countries(self, info, **kwargs):
return Country.objects.all()
class Query(graphene.ObjectType):
viewer = graphene.Field(Viewer)
node = relay.Node.Field()
def resolve_viewer(self, info):
return Viewer()
如果我在 QueryRenderer 中尝试此查询,它也可以正常工作:
query=graphql`query CartContainerQuery
viewer
id
country
...Country_country
`
我是否错误地使用了 DjangoFilterConnectionField?
【问题讨论】:
【参考方案1】:据我所知并现在进行测试,您的石墨烯端没问题,并且错误来自 ReactJS 端,这意味着您真正使用的是 DjangoFilterConnectionField。
我对此进行了大量研究,但由于我没有完全看到您的 React 代码,所以我有点怀疑。无论如何,正如我在这个示例中看到的(Query,Fragment),你用错了:
<Country country=props.viewer.countries.edges />
你应该这样使用它:
<Country country=props.viewer.countries />
据我了解,您需要将查询的对象传递给孩子
【讨论】:
以上是关于中继现代片段错误(期望对象包含数据....)的主要内容,如果未能解决你的问题,请参考以下文章