我想在组件中执行以下操作:
Relay.createContainer(Component, {
fragments: {
thing: AnotherComponent.getFragment('thing')
}
}
理想情况下,这会将片段设置为thing
当前组件上的片段,thing
以在其子组件之一上使用片段。有效地将了解什么thing
归结为使用什么的职责委派给他人。然后,包含Component
can的组件Component.getFragment('thing')
将调用AnotherComponent.getFragment('thing')
。
有谁知道如何做到这一点?
我发现实现这项工作的唯一方法是通过类似以下语法
Relay.createContainer(Component, {
fragments: {
thing: Relay.QL`
${AnotherComponent.getFragment('thing')}
`
}
}
这样可以正确命中服务器,并且服务器执行所指定的查询AnotherComponent
,但是现在查询的返回值未在的道具中提供Component
我发现这种类型的重复嵌套会产生如下查询:
query Router {
store {
...F3
}
}
fragment F0 on Store {
_fields2w4En2:fields(labels:["Country","Function"],owner_type:"requisitions") {
choices {
id,
label
},
id
,
label
}
}
fragment F1 on Store {
...F0
}
fragment F2 on Store {
...F1
}
fragment F3 on Store {
...F2
}
在基础级别上,我有这样的查询:
export default Relay.createContainer(SearchBar, {
fragments: {
searchFields: () => Relay.QL`
fragment searchFields on Store {
searchFields: fields(labels: ["Country", "Function"], owner_type: "requisitions") {
label
choices {
id
label
}
}
}
`,
},
});
因此,直截了当的方法不起作用的原因是因为getFragment
实际上并没有返回一个片段(ugh),而是引用了一个特定于声明它的容器的片段。幸运的是,您可以使用以下命令从其中获得纯净的片段AnotherComponent.getFragment('thing').getFragment()
。
看到这个操场的例子进行演示
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句