Apollo 客户端 gql lte、gte 空值问题

问题描述 投票:0回答:1

我有这个查询用于从 graphql 子图进行查询。我在 Next.js 前端使用 apollo 客户端来查询数据。

这是我的询问:

const DOMAIN_FIELDS = gql`
  fragment DomainFields on Domain {
    expires
    id
    isListed
    name
    listingPrice
    listingExpiresAt
    lastSalePrice
    owner
    tokenId
    seller
  }
`;

export const GET_DOMAINS = gql`
  ${DOMAIN_FIELDS}
  query GetDomains(
    $min_date: BigInt
    $max_date: BigInt
  ) {
    domains(
      where: {
        expires_gte: $min_date
        expires_lte: $max_date
      }
    ) {
      ...DomainFields
    }
  }
`;

我在组件内使用此查询

GET_DOMAINS
minExpirationDate
maxExpirationDate
变量的初始值为
null
。当用户输入一些日期值时,这些值将被填充。否则他们就会
null

当我尝试使用上面的查询来获取数据时:

import React, { useEffect } from 'react';
import { useApolloClient } from '@apollo/client';
import { GET_DOMAINS } from '@/queries/queries';
import { useSelector } from 'react-redux';
....

const DomainsTable = () => {
   const client = useApolloClient();
   const { minExpirationDate, maxExpirationDate } = useSelector(
    (state) => state.domainExploreState
   );
   ....


  // Fetch data
  useEffect(() => {
    fetchDataFromGQL();
  }, [
    minExpirationDate,
    maxExpirationDate
  ]);

  const fetchDataFromGQL = async () => {
     try {
         const baseQuery = {
            query: GET_DOMAINS,
            variables: {
              min_date: minExpirationDate,
              max_date: maxExpirationDate
            },
         };

         const { data } = await client.query(baseQuery);
       
     } catch {
       ....
     }
     .....
  }

 .....

}

export default DomainsTable;

我收到此错误:

ApolloError: Failed to get entities from store: unsupported filter ` >= ` for value `null`, query = from "sgd4"."domain"[*]{expires >= null and expires <= null and name != null and name ~ ^*}

有没有办法编写

GET_DOMAINS
查询来处理这个问题?当传递的
variable
值为空时,忽略它们?在这种情况下,
min_date
max_date
都可以同时是
null
,或者一个可以是
null
而另一个不是。

谢谢您!

javascript graphql apollo-client gql gqlquery
1个回答
0
投票

此错误来自于服务器上的解析器代码 - 与客户端无关。

改变:

from "sgd4"."domain"[*]{expires >= null and expires <= null and name != null and name ~ ^*}

至:

from "sgd4"."domain"[*]{expires != null and name != null and name ~ ^*}

或者,当变量为空时,不要在客户端的查询中包含这些变量。

© www.soinside.com 2019 - 2024. All rights reserved.