如何在组件 React / React-native 的单独页面中使用动态 graphql(字符串)

How to use dynamic graphql (string) from separate page in component React / React-native

我有一个 react-native 功能组件,它使用 Apollo useQuery 挂钩来进行一些 graphql 查询。呈现此组件时,它会从上一页接收到一个 id 道具。所以我需要在 graphql 查询中动态使用这个 id。

我可以像这样在组件内部轻松完成

const query = gql`
  query MyQuery {
    getItems(id: \"${id}\") {
      items {
          name
          price
        }
      }
    }
  `;

  const { loading, error, data } = useQuery(query); 

但我需要将所有 graphql 查询放入单独的文件夹中。我不知道如何将 prop 发送到另一个页面,然后只接收回 graphql 字符串以在 useQuery 挂钩中使用。

因此,我需要从另一个页面接收它,而不是将 const 查询放到我使用 'useQuery' 的当前页面。

我想做这样的事情:

import Query from '../queries/itemQuery'

const { loading, error, data } = useQuery(Query(id));

我试过这个和类似的东西:

itemQuery.js

import { gql } from '@apollo/client';
const itemQuery = (id) => { 
    gql`
      query MyQuery {
        getItems(id: ${id}) {
          items {
              name
              price
            }
          }
        }
      `;
export default itemQuery

在我使用 'useQuery' 的主页中:

import Query from '../queries/itemQuery'
const { loading, error, data } = useQuery(Query(id));

当我尝试将 id 从主页发送到 itemQuery.js 时,它不起作用。我遇到了不同的错误,例如 itemQuery is not a function 等。我还尝试将其作为 returns 查询的函数,但它没有用。我修改了这个问题。以前的答案对我没有用,我想我解释错了。这是我在 Whosebug 上问的第一个问题,所以你可以帮助我改进,只问我应该解释的遗漏部分。

您必须在查询中使用 variables。因此,在查询中将 id 作为变量传递,然后您可以从查询中的任何位置传递 id 变量值。

因此,首先在 itemQuery.js 中声明您的查询如下:

export const GET_ITEMS = gql`
  query getItems($id: String) {
    getItems(id: $id) {
      items {
          name
          price
        }
      }
    }
`;

现在,在您的组件中导入查询作为传递传递变量,如下所示:

import { GET_ITEMS } from '../queries/itemQueries';

const { loading, error, data } = useQuery(Query, {
  variables: {id: 'your_id`}
});

请注意,我使用 $id: String 假设您的 id 将是字符串。但是您可以根据需要使用任何类型。