是否可以将变量传递给 react-apollo 的“儿童”道具?

Posted

技术标签:

【中文标题】是否可以将变量传递给 react-apollo 的“儿童”道具?【英文标题】:Is there away to pass variables into the "children" props for react-apollo? 【发布时间】:2019-12-04 01:17:30 【问题描述】:

想知道是否有办法将额外的数据传递到 UI 触发突变的函数中。请参阅下面的示例。

        <Mutation 
            mutation=COMPLETE_EVALUATION
            variables=studentId:courses.course.studentId, courseId: courses.course.courseId, passed:true, checkpoints:courses.evals>
             (completeEval, error, loading) => (
                <div className="competency-actions ml-32 mr-64">
                    <Button className="w-128 mr-16 pass-button" variant="contained" onClick=() => completeEval(true)>
                        PASS
                    </Button>
                    <Button className="w-128 ml-16 fail-button" variant="contained" onClick=() => completeEval(false)>
                        REMEDIATE
                    </Button>
                </div>
            ) 
        </Mutation>

我想根据单击的按钮为突变提供更多信息。我是走在正确的道路上还是有其他方法可以完成设置该值?

【问题讨论】:

【参考方案1】:

传递给Mutation 组件的render props 函数的第一个参数是mutate 函数。这个函数可以在没有额外参数的情况下调用,但它也可以接受一个选项对象。此选项对象可以具有以下属性:

variables optimisticResponse refetchQueries update

这些选项与可以直接传递给Mutation 组件的道具相同。事实上,如果通过 mutate 函数提供了一个选项,如果也提供了一个选项,它将覆盖其对应的 Mutation 组件属性。

这意味着您可以省略组件中的 variables 属性,而是在调用 mutate 函数时传入变量:

completeEval(
  variables: 
    studentId:courses.course.studentId,
    courseId: courses.course.courseId,
    checkpoints:courses.evals,
    passed: true,
  
)

请参阅docs 了解更多信息。

【讨论】:

太酷了,谢谢丹尼尔!我更新了 Mutation 以删除变量 prop 并将其与函数一起传递。将来我会尝试更深入地研究文档,有时很难找到我正在寻找的内容:)

以上是关于是否可以将变量传递给 react-apollo 的“儿童”道具?的主要内容,如果未能解决你的问题,请参考以下文章

ReactJS/Javascript/Graphql/React-apollo:传递查询变量

如何将变量传递给 GraphQL 查询?

使用 graphql 将道具传递给高阶组件时出现 React-apollo Typescript 错误

将变量从输入传递到 GraphQL 搜索调用

是否可以将脚本传递给shell变量中的awk?

如何将值从javascript变量传递给剃刀变量?