Mai*_*uiz 9 relayjs relaymodern
我正在使用Relay Modern(compat).我有一个片段,其中包含一个具有一个参数的字段,但我找不到从父组件传递变量值的方法:
// MyFragmentComponent.jsx
class MyFragmentComponent extends Component {...}
const fragments = {
employee: graphql`
fragment MyFragmentComponent_employee on Employee {
hoursWorked(includeOvertime: $includeOvertime)
dob
fullName
id
}
`,
}
export default Relay.createFragmentContainer(MyFragmentComponent, fragments)
Run Code Online (Sandbox Code Playgroud)
它最终会说$includeOvertime没有定义.渲染此组件的上下文如下所示:
// MyRootComponent.jsx
class MyRootComponent extends Component {
render() {
const { employee } = this.props
const includeOvertime = //... value is available here
return (
<div>
<MyFragmentComponent employee={employee} />
</div>
)
}
}
const query = graphql`
query MyRootComponentQuery($employeeId: String!) {
employee(id: $employeeId) {
fullName
...MyFragmentComponent_employee
}
}
`
export default MyUtils.createQueryRenderer(MyRootComponent, query) // this just returns a QueryRenderer
Run Code Online (Sandbox Code Playgroud)
使用relay classic,您可以通过这种方式传递变量:
....
employee(id: $employeeId) {
fullName
${MyFragmentComponent.getFragment('employee', variables)}
}
Run Code Online (Sandbox Code Playgroud)
如何通过现代接力实现同样的目标?
Mai*_*uiz 11
使用@argumentDefinitions和@arguments指令似乎是要走的路.在继电器版本之前graphql.experimental必须使用1.4.0 而不是graphql.
在片段定义中:
const fragments = {
employee: graphql`
fragment MyFragmentComponent_employee on Employee
@argumentDefinitions(includeOvertime: { type: "Boolean", defaultValue: false }) {
hoursWorked(includeOvertime: $includeOvertime)
dob
fullName
id
}
`,
}
Run Code Online (Sandbox Code Playgroud)
如果您希望参数是必需的:
@argumentDefinitions(includeOvertime: { type: "Boolean!" })
Run Code Online (Sandbox Code Playgroud)
在父组件中,您应该像这样指定片段的参数:
const query = graphql`
query MyRootComponentQuery($employeeId: String!, $includeOvertime: Boolean) {
employee(id: $employeeId) {
fullName
...MyFragmentComponent_employee @arguments(includeOvertime: $includeOvertime)
}
}
`
Run Code Online (Sandbox Code Playgroud)
在官方中继文档的这个页面中,有一个用于定义/传递参数的指令示例.
更新:
由于不推荐继电器版本1.4.0
graphql.experimental,现在常规graphql标签支持所有功能.
更新:
在继电器版本1.5.0
graphql.experimental被删除.
| 归档时间: |
|
| 查看次数: |
4161 次 |
| 最近记录: |