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

React Native中使用Apollo查询用户数据时变量$id未定义问题排查

解决React Native Apollo查询中变量不匹配导致的GraphQL错误

你遇到的这个错误其实是个容易忽略的细节问题——GraphQL查询定义的变量名和你传入的变量名不匹配。

先看你的查询语句:

const GET_USER_DATA = gql` query User($id: ID!) { User(id: $id) { id name } }`;

这里你明确定义的查询变量是$id,但在<Query>组件里,你传入的变量是:

variables={{ userId }}

这相当于你传给Apollo的变量是{ userId: 你的用户ID值 },但GraphQL一直在找$id这个变量,自然会提示“$id的值是undefined”,哪怕userId确实有值。

修正方法

把<Query>组件的variables改成和查询中定义的变量名一致,用id作为键,把userId的值赋给它:

const User = ({ userId }) => { 
  console.log("User id: ", userId); 
  return ( 
    <Query query={GET_USER_DATA} variables={{ id: userId }}> 
      {({ loading, error, data }) => { 
        if (loading) return <Text>Loading ...</Text>; 
        if (error) return <Text>Error!: {error.message}</Text>; 
        // 直接访问data.User的属性,比打印整个data对象更直观
        return ( 
          <Text>用户名: {data.User.name},ID: {data.User.id}</Text> 
        ); 
      }} 
    </Query> 
  ); 
}

额外提示

你原来返回的<Text>Text: {data}</Text>会直接打印整个data对象,在React Native里这样显示不太友好,改成直接访问data.User的属性会更符合预期。

总结一下:Apollo会严格按照你在GraphQL查询中定义的变量名来匹配传入的变量,只要键名对应上,这个错误就会消失。

内容的提问来源于stack exchange,提问作者Kaiser Soze

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:33:40