我是阿波罗世界的新人。对于我的Vue apollo客户端,我使用vue composable和@vue/apollo-composable以及版本V4。以及后端的nodejs服务器和apollo服务器。现在我在useQuery的登录页面上遇到了一个问题,如果我调用查询的结果,他们将显示错误"TS2349:此表达式不可调用。“
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
loginBenutzer({ kuerzel: username.value, passwort: password.value })loginBenutzer显示错误"TS2349:此表达式不可调用。类型'Ref‘没有调用签名“。
在Apollo服务器中,类型的定义如下
type Query {
loginBenutzer(kuerzel: String!, passwort: String!): LoginResponse!,
}但如果我将查询更改为突变,则它们可以正常工作。像这样
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)
})
}
}像这样的类型
type Mutation {
loginBenutzer(kuerzel: String!, passwort: String!): LoginResponse!,
}但我非常确定,调用用户信息的useQuery是正确的方式。有人能帮我吗。非常感谢!
发布于 2021-04-19 17:46:24
结果:结果数据对象。
正如documentation所说,result返回结果数据对象,它将是一个引用类型,
refetch( variables ?):再次执行查询,可以选择使用新变量。
如果要传递新变量,请尝试使用refetch
https://stackoverflow.com/questions/65852152
复制相似问题