当前位置: 首页 > 知识库问答 >
问题:

GraphQL vue apollo查询和突变相同视图

罗凯
2023-03-14

我刚刚开始在Apollo和Vue中使用GraphQL,所以这可能是一个“愚蠢”的问题,但我不知道怎么做。

如何在同一个视图中执行查询以获取一个对象,并使用变异更新它

假设我有一个简单的模式

type Product {
   id: ID!
   title: String!
   description: String
}

和vue组件

<script>

  // GraphQL query
  const ProductQuery = gql `
    query($id: ID){
      Product(id: $id) 
      {
        id
        title
        description
      }
    }
  `;

  const UpdateProductQuery = gql `
    mutation updateProduct($id: ID!, $title: String!, $description: String) {
      updateProduct(
        id: $id,
        title: $title,
        description: $description,
      ) {
        id
      }
    }
  `;

export default {
    data() {
      return {
        Product: {},
      };
    },
    apollo: {
        Product: {
            query: ProductQuery,
            variables() {
                  id: 1234,
           };
        },
    },
    methods: {
        updateProduct() {

          this.$apollo.mutate({
             mutation: UpdateProductQuery,
             variables: {
                id: this.Product.id,
                title: this.Product.title,
                description: this.Product.description,
            },
          })
        }
   }
};
</script>

现在我应该如何编写模板部分?我可以将产品对象链接到输入中的v模型吗?

<template>
   <section>
       <input v-model="product.title"></input>
       <input v-model="product.description"></input>
      <button @click="updateProduct">Update</button>
   </section>
</template>

谢谢你的帮助。

共有2个答案

法池暝
2023-03-14

你绝对是在正确的轨道上!我注意到的一件事是,产品在JS中是大写的,但在模板中不是大写的。因此,要么像这样更新模板:

<template>
  <section>
    <input v-model="Product.title"></input>
    <input v-model="Product.description"></input>
    <button @click="updateProduct">Update</button>
  </section>
</template>

...或者在您的JS中使产品小写(我个人更喜欢)。

此外,我相信在这种情况下您需要使用反应式参数变量需要是函数而不是对象。

variables() {
  return {
    id: this.Product.id,
    title: this.Product.title,
    description: this.Product.description
  }
}
印振国
2023-03-14

好的,我终于发现查询中的数据是不可变的,这就是为什么我不能更新它们。

解决方案是使用object创建新对象。分配或删除cloneDeep。

 类似资料:
  • 我正在开发一个GraphQL API,其中有一个带有初步数据比较的导入特性(在现有数据之间 电流为: API使用者执行GQL查询查询预览导入($数据:字符串),其中,是base64编码的电子表格。在后端解析数据,并在数据库中插入一条guid为的记录。最后,API返回电子表格中的数据与数据库中的数据以及guid之间的差异结果 前端然后要求用户在看到比较(创建、更新、删除)后确认导入。为此,向API发

  • 我尝试执行Graphql客户端查询。遗憾的是,我找不到任何关于如何使用动态图QL客户端进行简单变异的文档或示例。这是文件https://quarkus.io/guides/smallrye-graphql-client. {0}..{4} 是可变占位符。有人知道如何使用DynamicGraphlQlClient执行这个查询吗? 谢谢

  • 我正在使用tomcat、jsp和MSSQL2008,希望获得一些汇总数据,如每日、每周、每月和每年。从这里,我搜索了如何对来自MSSQL的这些摘要数据使用datapart()函数。在JSP中,我使用 在MSMS中,查询指令进行测试。 我在JSP程序中遇到了两个问题,但在MS SQL Server Management Studio中使用相同的查询可以很好地工作。 null 我的问题是:

  • 视图查询可以实现不依赖数据库视图的多表查询,并不需要数据库支持视图,是JOIN方法的推荐替代方法,例如: Db::view('User', 'id,name') ->view('Profile', 'truename,phone,email', 'Profile.user_id=User.id') ->view('Score', 'score', 'Score.user_id=Pr

  • 文档: 操作: 合作伙伴: HQL(“INCASAT”=“兑现”,“VANDUT”=“出售”):

  • 有些事情我想应该很容易,但我在网上搜索了很长时间后找不到答案: 我只是想使用graphql进行一次变异,然后再使用另一个graphql查询刷新数据,如何在一个HTTP(graphql)请求中实现这一点? 失败的尝试: 我尝试使用批处理发送包装在一个数组中的两个graphql模式,但它是异步的,查询会在不需要的变异之前返回 我试着用突变编写相同的查询,实际上什么都不突变,并把它放在真正的突变之后,这