如何将参数传递给 apollo 中的查询方法?

Posted

技术标签:

【中文标题】如何将参数传递给 apollo 中的查询方法?【英文标题】:how can I pass arguments to the query method in apollo? 【发布时间】:2021-12-30 12:00:18 【问题描述】:

我正在使用 apollo 客户端来获取数据。 我希望它只获取登录用户所做的那些待办事项。

但这件作品不起作用

源代码:

import  gql  from '@apollo/client';

export const todoService = 
getTodoItems: () => gql`
    query todoQuery($loggedUserId: String!) 
      todo(where:  userId:  _eq: $loggedUserId  , order_by:  createdAt: desc ) 
        id
        todo 
            title,
            body,
            status
        
        userId
      
    

`

Redux thunk 文件

import  createAsyncThunk  from '@reduxjs/toolkit';
import  apolloClient  from '@/Apollo';
import  todoService  from './_graphql';

export const todoThunk = 
getTodoItems: createAsyncThunk(`db/getTodoItems`, async (loggedUserId: string) => 
    const response = await apolloClient.query(
      query: todoService.getTodoItems(),
      variables:  loggedUserId ,
      fetchPolicy: `network-only`,
    );
    return response;
  ),

反应组件

  useEffect(
     dispatch(todoThunk.getTodoItems(loggedUserId));
  ,[dispatch])

但是,当我像这样硬编码 userId 代替变量 loggedUserId 时,它会起作用:

export const todoService = 
getTodoItems: () => gql`
    query todoQuery 
      todo(where:  userId:  _eq: "some_hard_coded_id"  , order_by:  createdAt: desc ) 
        id
        todo 
            title,
            body,
            status
        
        userId
      
    

`

【问题讨论】:

todo(where: userId: _eq: $loggedUserId ..... 编码前在操场上测试查询(使用变量) 使用变量测试过?显示它 我在 hasura api 中对其进行了测试,但没有使用变量我在那里运行此查询并且它可以工作 todo(where: userId: _eq: 'id_here' 再次,使用变量进行测试 【参考方案1】:

您似乎错过了$ 标志

尝试:

import  gql  from '@apollo/client';

export const todoService = 
getTodoItems: () => gql`
    query todoQuery($loggedUserId: String!) 
      todo(where:  userId:  _eq: $loggedUserId  , order_by:  createdAt: desc ) 
        id
        todo 
            title,
            body,
            status
        
        userId
      
    

`

【讨论】:

抱歉打错了。添加 $ 符号后它也不起作用【参考方案2】:

这对我有用。

import  gql  from '@apollo/client';

export const todoService = 
getTodoItems: () => gql`
    query todoQuery($loggedUserId: uuid! = loggedUserId) 
      todo(where:  userId:  _eq: $loggedUserId  , order_by:  createdAt: desc ) 
        id
        todo 
            title,
            body,
            status
        
        userId
      
    

`

【讨论】:

以上是关于如何将参数传递给 apollo 中的查询方法?的主要内容,如果未能解决你的问题,请参考以下文章

Apollo Client Angular:如何将从查询中获得的数据作为参数传递给graphql中的另一个查询?

将参数传递给 react-apollo-hooks useQuery

如何将参数传递给graphql查询?

Apollo Server:将参数传递给嵌套解析器

如何将 Apollo 数据和 React Router 4 url​​ 参数传递给我的组件

如何将参数传递给SQL(Excel)中的查询