在 React 组件中的多个 GraphQL 查询之间进行更改

Posted

技术标签:

【中文标题】在 React 组件中的多个 GraphQL 查询之间进行更改【英文标题】:Change between multiple GraphQL queries within React component 【发布时间】:2020-04-24 03:13:06 【问题描述】:

我正在使用 React 和 GraphQL 制作一个反应应用程序,我希望默认随机化鸡尾酒,但可以选择在单击按钮后通过搜索查找特定鸡尾酒。因此我需要两个不同的查询。

export default function Cocktails() 
    const [
        dataType,
        setDataType
    ] = useState('randomCocktail');

    const [
        queryType,
        setQueryType
    ] = useState(RANDOM_COCKTAIL_QUERY);

    const  loading, error, data, refetch  = useQuery(queryType);

    if (loading) return 'Loading...';
    if (error) return `Error! $error`;

    return (...)

如果我尝试在默认 useQuery 下添加第二个(惰性)查询,程序会崩溃,因为加载和数据已经分配。 ("解析错误:标识符'loading'已经被声明")

const  loading, error, data, refetch  = useQuery(queryType);
const  loading, data  = useLazyQuery(ONE_COCKTAIL_BY_NAME_QUERY);

我想知道如何在加载来自不同查询的数据之间进行最佳切换。任何帮助将不胜感激!

【问题讨论】:

一个组件中的多个查询应该可以正常工作。您可以发布有问题的代码吗?应用崩溃时您收到的错误消息是什么? 谢谢!我添加了代码以更好地显示导致程序崩溃的代码类型。 看起来您的问题是您两次声明了 data 变量。当使用 const .. 语法将对象解构为变量时,您正在声明变量。尝试重命名这样的数据变量之一 const data:data2, loading。 【参考方案1】:
  const  loading, error, data: dataBooks  = useQuery(getBooksQuery);

您可以将数据重命名为 data: dataBooks

【讨论】:

以上是关于在 React 组件中的多个 GraphQL 查询之间进行更改的主要内容,如果未能解决你的问题,请参考以下文章

使用 Apollo Client 为 React 组件动态设置 GraphQL 查询

React Apollo:从组件状态动态更新 GraphQL 查询

Graphql,react-apollo如何在加载组件状态时将变量传递给查询

如何从另一个 React / ReactNative 组件触发 GraphQL 查询

GraphQL - Gatsby.js- React 组件。 - 如何查询变量/参数?

使用 Apollo 客户端根据 React 组件中的节点类型值发出条件 GraphQL 请求