You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quasar Vue3中GraphQL单用户查询参数不更新问题求助

问题:Quasar Vue3中GraphQL查询始终使用初始userId值,无法更新

我在Quasar Vue3中使用GraphQL,需要点击按钮时根据userId获取单个用户数据,但当前代码始终传递初始值42作为userId,即使已更新state中的selectedUserId。同时希望集成loading属性,不清楚如何在按钮事件中传递userId调用查询。

原代码实现

状态定义

const state = reactive({
  selectedUserId: 42,
});

查询语句

const getOneUserQuery = gql`
  query oneUser($id: Int!) {
    oneUser(userId: $id) {
      id
      firstName
      lastName
    }
  }
`;

查询调用代码

const oneUserResults = useQuery(getOneUserQuery, {
  id: state.selectedUserId,  //始终传递42
});

按钮点击事件

async function onClickSubmit(userId: number) {
  state.selectedUserId = userId; //已确认此处更新了值
  console.log(state.selectedUserId);
  const fetchedUser = await oneUserResults.refetch();
  console.log(fetchedUser);
  if (fetchedUser) {
    console.log(fetchedUser.data);
    console.log(fetchedUser.data.oneUser);
    console.log(fetchedUser.data.oneuser.id); //返回的始终是userId=42的用户
    console.log(fetchedUser.data.oneuser.firstName);
  }
}

解决后的可运行代码

const state = reactive({
  loading: oneUserLoading,
});

const { refetch: oneUserFetch, loading: oneUserLoading } = useQuery(gql`
  query oneUser($id: Int!) {
    oneUser(userId: $id) {
      id
      firstName
      lastName
    }
  }
`);


async function onClickSubmit(userId: number) {
  state.loading = true;
  if (!userId) return;
  const fetchedUser = await oneUserFetch({ id: userId });
  console.log(fetchedUser);
  if (fetchedUser) {
    console.log(fetchedUser.data);
    console.log(fetchedUser.data.oneUser);
    console.log(fetchedUser.data.oneUser.id);
    console.log(fetchedUser.data.oneUser.firstName);
  }
  state.loading = false;
}

内容的提问来源于stack exchange,提问作者Christina Arvig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 13:25:29