【问题标题】:Explain the syntax for calling mutate on the Apollo client解释在 Apollo 客户端调用 mutate 的语法
【发布时间】:2019-03-13 21:53:18
【问题描述】:
client.mutate[1]({
    mutation[2]: gql`
        mutation[3] signOut[4] {
            signOut[5] {
                success[6]
            }
        }
    `,
});

括号中的数字是我对查询不同部分的注释。我对它们的含义的最佳猜测如下。纠正我错误或不完整的地方。我最大的疑问是斜体:

[1] client.mutate Apollo 客户端上有一个 mutate 方法,因为 Apollo 客户端处理突变的方式与查询不同

[2] 突变只是一个名为突变的对象属性,它被传递给 Apollo 客户端

[3] 变异服务器上的根变异字段

[4] signOut 变异根字段上可用的字段。 令我惊讶的是,signOut 是在突变后立即写入的,而不是在一对括号内的一行中

[5] signOut 我猜服务器上的 signOut 字段解析为返回另一个名为 signOut 的字段? 我理解正确吗?这正常吗?

[6] 成功内部 singOut 字段解析返回一个名为成功的对象

【问题讨论】:

    标签: graphql apollo apollo-client


    【解决方案1】:

    关于 [4] signOut 和 [5] signOut,这是您为突变命名的名称。

    例如:

    mutation signOut {
      signOut {
        success
      }
    }
    

    和

    是同一个突变
    mutation logOut {
      signOut {
        success
      }
    }
    

    两个突变触发的method 是signOut,但它们有不同的名称(logOut 和signOut)。

    其他点都是正确的。

    注意事项:

    mutation(或查询)的name 仅供客户端使用,服务器没有命名突变的定义。

    在一个突变中有 2 个级别是因为您可以在一个突变中触发多个突变,例如:给定必要的 the user signs out and unsubscribes to notifications,我们可以构建一个突变,例如:

    mutation logOutAndUnsubscribe {
      signOut {
        success
      }
      unsubscribe {
        success
      }
    }
    

    在这种情况下,我们将突变命名为logOutAndUnsubscribe,它会触发两个突变signOut 和unsubscribe。同样,服务器实现了signOut 和unsubscribe,但对logOutAndUnsubscribe 的了解为零。

    【讨论】:

    • 谢谢!您能否扩展:A)客户端上的名称是否需要与服务器上的名称相匹配,或者无论如何都会返回正确的数据? B) 有两个级别的名称有什么意义,signOut > signOut 或者 logOut > logOut 而不是简单的 signOut?
    猜你喜欢
    • 2018-02-11
    • 2020-05-03
    • 2020-07-22
    • 2020-01-12
    • 2018-10-28
    • 2018-02-09
    • 2019-07-27
    • 2019-08-01
    • 2020-05-14
    相关资源
    最近更新 更多