将 ID 从 React 传递给 Apollo 以找到正确的结果?

Posted

技术标签:

【中文标题】将 ID 从 React 传递给 Apollo 以找到正确的结果?【英文标题】:Pass ID from React to Apollo to find correct result? 【发布时间】:2018-06-29 00:36:18 【问题描述】:

我将 React 与 Apollo(Apollo Client v2)一起使用。我有需要返回单个组的组查询。

此代码有效,但我已硬编码 HARD-CODED-ID。我怎样才能将 ID 作为字符串从 React 组件传递?

在我的 React 组件中:

const groupQuery = gql`
    query Group 
        group 
            _id
            name
        
    
`;

export default graphql(groupQuery, 
    props: ( data ) => ( ...data ),
)(GroupPage);

我的解析器:

Query: 
    groups() 
        return Groups.find().fetch();
    ,
    group() 
        return Groups.findOne('HARD-CODED-ID');
    ,

【问题讨论】:

【参考方案1】:

您需要做三件事:

1.) 如果您还没有修改,请修改服务器上的架构,以便您的查询接受 id 作为输入,例如:

type Query 
  #other queries
  group(id: ID!): Group

2.) 修改您的解析器,以便它处理传入的 id。假设您使用的是graphql-tools

group(root,  id ) 
  return Groups.findOne(id); // did you mean something like findOne(id) ?
,

3.) 修改您的客户端代码。通常,您会将 id 作为传递给组件的道具,然后将其用作请求中的变量。

const groupQuery = gql`
    query Group($id: ID!) 
        group(id: $id) 
            _id
            name
        
    
`;

// assuming that the component prop is called groupId
export default graphql(groupQuery, 
    options: ( groupId ) => (
      variables:  id: groupId ,
    ),
)(GroupPage);

options 可以是一个函数,而不是一个对象,在这种情况下,它会将组件的 props 作为其第一个参数传递。然后,您可以使用这些道具来定义您的查询将使用的变量。您可以阅读更多关于在 Apollo 客户端 here 和 here 中使用变量的信息。

【讨论】:

IM 收到一些错误:modules.js localhost:3000/graphql400(错误请求)和未处理(在 react-apollo:Apollo(GroupPage) 中)错误:网络错误:响应不成功:收到状态代码 400 我在 root 和 id 的解析器中放置了一个 console.log,所以我知道正在传递什么。我得到未定义和一个空对象。 我试图一步一步地工作。我使用的是 Graphiql 界面,所以我知道这不是 React 问题。从 Graphiql 传递参数的语法是什么? group(_id:"dfd") name 对不起!只需要重建我的服务器并刷新 GraphiQL 页面。

以上是关于将 ID 从 React 传递给 Apollo 以找到正确的结果?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将变量传递给 react-apollo 的“儿童”道具?

ReactJS/Javascript/Graphql/React-apollo:传递查询变量

使用 graphql 将道具传递给高阶组件时出现 React-apollo Typescript 错误

如何将数据从反应组件传递到 Apollo graphql 查询?

React w/ Apollo & Drupal nodeQuery - 如何定义/传递变量?

将 url id 从 react-router 传递给 mongoose