首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vue-Apollo V4组合API @vue/apollo-可在登录信息上合成。TS2349:此表达式不可调用。类型“”Ref<any>“”没有调用签名

Vue-Apollo V4组合API @vue/apollo-可在登录信息上合成。TS2349:此表达式不可调用。类型“”Ref<any>“”没有调用签名
EN

Stack Overflow用户
提问于 2021-01-23 04:14:01
回答 1查看 401关注 0票数 0

我是阿波罗世界的新人。对于我的Vue apollo客户端,我使用vue composable和@vue/apollo-composable以及版本V4。以及后端的nodejs服务器和apollo服务器。现在我在useQuery的登录页面上遇到了一个问题,如果我调用查询的结果,他们将显示错误"TS2349:此表达式不可调用。“

代码语言:javascript
复制
import { ref, defineComponent } from '@vue/composition-api'
import gql from 'graphql-tag'
import { useUserLogin } from '@/mixins/user-login'
import { CustomRules } from '@/validators/rules'
import { useQuery, useMutation } from '@vue/apollo-composable'

export default defineComponent({
  props: {
    msg: String,
  },
  setup(props, { root }) {
    const form = ref()
    const rules = ref(CustomRules)
    const username = ref('')
    const password = ref('')
    const errorMessage = ref('')

    const { result: loginBenutzer } = useQuery(gql`
      query loginBenutzer($kuerzel: String!, $passwort: String!) {
        loginBenutzer(kuerzel: $kuerzel, passwort: $passwort) {
          user {
            kuerzel: BEN_MIA_KUERZEL,
            name: BEN_NAME
          },
          token
        }
      }
    `)

    function login() {
      if (form.value.validate()) {
        loginBenutzer({ kuerzel: username.value, passwort: password.value })
          .then(data => {
            useUserLogin(data.data.loginBenutzer)
            root.$router.push('/hm')
          })
          .catch(err => {
            errorMessage.value = err.message
            console.log(err)
          })
      }
    }

    return {
      form,
      rules,
      username,
      password,
      login,
      errorMessage,
    }
  },
})

调用result:此行的loginBenutzer

代码语言:javascript
复制
 loginBenutzer({ kuerzel: username.value, passwort: password.value })

loginBenutzer显示错误"TS2349:此表达式不可调用。类型'Ref‘没有调用签名“。

在Apollo服务器中,类型的定义如下

代码语言:javascript
复制
type Query {
        loginBenutzer(kuerzel: String!, passwort: String!): LoginResponse!,
    }

但如果我将查询更改为突变,则它们可以正常工作。像这样

代码语言:javascript
复制
    const { mutate: loginBenutzer } = useMutation(gql`
      mutation loginBenutzer($kuerzel: String!, $passwort: String!) {
        loginBenutzer(kuerzel: $kuerzel, passwort: $passwort) {
          user {
            kuerzel: BEN_MIA_KUERZEL,
            name: BEN_NAME
          },
          token
        }
      }
    `)

    function login() {
      if (form.value.validate()) {
        loginBenutzer({ kuerzel: username.value, passwort: password.value })
          .then(data => {
            useUserLogin(data.data.loginBenutzer)
            root.$router.push('/hm')
          })
          .catch(err => {
            errorMessage.value = err.message
            console.log(err)
          })
      }
    }

像这样的类型

代码语言:javascript
复制
    type Mutation {
        loginBenutzer(kuerzel: String!, passwort: String!): LoginResponse!,
    }

但我非常确定,调用用户信息的useQuery是正确的方式。有人能帮我吗。非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2021-04-19 17:46:24

结果:结果数据对象。

正如documentation所说,result返回结果数据对象,它将是一个引用类型,

refetch( variables ?):再次执行查询,可以选择使用新变量。

如果要传递新变量,请尝试使用refetch

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65852152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档