【问题标题】:Why graphql query is not working in react?为什么graphql查询在反应中不起作用?
【发布时间】:2019-09-22 23:55:42
【问题描述】:

在我的 react 项目中,我使用查询来搜索 github 用户数据。查询如下:

const GET_USER = (user) => `
{
  user(login: "${user}") {
    name
    login
    avatarUrl
    company
    gists{
     totalCount
   }
   following{
      totalCount
    }
    followers(last: 5){
      edges{
            node{
                id
            name
            avatarUrl
        }
      }
    }
    repositories(last: 5){
      edges{
        node{
          id
          name
        }
      }
    }
  }
}
`;

如果我仅通过在 followers 中添加一个名为 email 的字段来更新查询,则反应应用程序将停止工作:


followers(last: 5){
      edges{
            node{
            id
            name
            avatarUrl
            email
        }
      }
    }

如果我在查询中添加有关组织的数据,也会发生同样的情况,如下所示:

 organizations(last: 5){
      edges{
        node{
          id
          name
        }
      }
    }

但是当我在此链接中执行相同的查询时:[https://developer.github.com/v4/explorer/] 它可以工作。

我的反应项目在链接中:[https://github.com/rvmelo/react-tech6-final-project]。查询位于App.js 文件夹中的App.js 文件中。

【问题讨论】:

    标签: javascript reactjs graphql


    【解决方案1】:

    它停止工作,因为用户可能没有此类信息。

    我克隆了你的仓库并添加了代码

    <div>email:{user.following.email}</div>
    

    它确实停止工作,然后我添加了一个后备

    <div>email:{user.following.email || ""}</div>
    

    它奏效了。

    您可能想在渲染之前检查这些信息,例如

    {user && user.following && user.following.email &&
      (<div>email:{user.following.email}</div>)
    }
    

    organizations 也一样

    <p>
      {user && user.organizations &&
        <div>Organization name:{user.organizations.name}</div>
      }
    </p>
    

    至于followers(已更新)

    const Followers = ({ followers }) => (
    <div>
    
      <strong>Followers updated for SO:</strong>
    
      <ul>
        {followers.edges.map(follower => (
        <li key={follower.node.id}>
          <img src={follower.node.avatarUrl}/>
          <div>
            {follower && follower.node && follower.node.name && (
            <div>Name:{follower.node.name}</div>) }
          </div>
          <div>
            {follower && follower.node && follower.node.email && (
            <div>Email:{follower.node.email}</div>) }
          </div>
        </li>
        ))}
      </ul>
    </div>
    );
    

    我的个人资料的屏幕截图。一个有电子邮件的追随者,另一个没有。

    我继续分叉你的回购,here's my repo 从你的问题的one 克隆 确保您的令牌具有权限。在一时冲动之下,我完全访问了我的钥匙。检查你的!

    【讨论】:

    • 但问题不在于user.following。它是followers.node。我确实喜欢这样:{followers &amp;&amp; followers.node &amp;&amp; followers.node.email &amp;&amp;(&lt;div&gt;email:{followers.node.email}&lt;/div&gt;) },但它仍然无法正常工作
    • 它似乎正在工作。我会在 map 函数内将名称更改为 follower 以防止冲突。另外,你在哪里使用代码?我添加了完整的功能以防万一
    • 我确实像你一样,但我只是添加了电子邮件字段并且没有工作......我有文件,所以你可以看到我的更新:[github.com/rvmelo/github-search/blob/master/App-example.js]
    • 我刚刚更新了我的帖子,并按照您的要求更新了代码后遇到的错误
    • 这是另一个问题,但我更新了我的代码。我无法重现它,尝试空用户,输入任何内容......什么都没有。我什至尝试构建而不是运行开发代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 2013-12-03
    • 2017-06-20
    • 1970-01-01
    相关资源
    最近更新 更多