我有一个使用@include(if: $variable)
有条件地获取某些字段的中继容器,但我必须为每个字段编写指令:
const relayOptions = {
initialVariables: {
expandDetails: false,
},
fragments: {
company: Relay.QL`
fragment on Company {
id
name
employees @include(if: $expandDetails) {
fullName
}
admins @include(if: $expandDetails) {
fullName
}
departments @include(if: $expandDetails) {
name
}
}
`,
},
}
有没有办法我只能写一次指令,比如这样的事情(我知道这段代码不会起作用):
const relayOptions = {
initialVariables: {
expandDetails: false,
},
fragments: {
company: Relay.QL`
fragment on Company {
id
name
@include(if: $expandDetails) {
employees {
fullName
}
admins {
fullName
}
departments {
name
}
}
}
`,
},
}
我尝试了其他一些疯狂的方式,但没有一个工作,我得到了这个错误:
' @包括'不能应用于片段定义(允许:字段,片段扩展,内联片段)
编辑:注意:我需要这样做以避免不必要地获取数据。如果展开数据的可折叠组件已展开(我计划在安装组件后使用setVariables
执行此操作),我只想获取数据。
在这个例子中,只有3个条件字段,但在实际情况中,我试图解决的问题远不止于此。
答案 0 :(得分:1)
您可以将指令放在内联片段中,只使用与外部字段相同的类型:
fragment on Company {
... on Company @include(if: $expandDetails) {
employees { fullName }
admins { fullName }
departments { fullName }
}
}