我有这个查询用于从 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
而另一个不是。
谢谢您!
此错误来自于服务器上的解析器代码 - 与客户端无关。
改变:
from "sgd4"."domain"[*]{expires >= null and expires <= null and name != null and name ~ ^*}
至:
from "sgd4"."domain"[*]{expires != null and name != null and name ~ ^*}
或者,当变量为空时,不要在客户端的查询中包含这些变量。