我有一张表,显示来自服务器的数据。使用Apollo Client查询检索数据。
该表具有多个过滤器和一个搜索框。搜索中的所有过滤器和文本都保存在本地存储中。
表和提取的工作方式如下:
localstorage
读取,构建用于获取的变量(偏移量,限制等)localstorage
我的问题是:为此,我应该使用useQuery
还是useLazyQuery
。
有了useQuery
,我可以做到:
// first fetch
const {data, loading, refetch} = useQuery(gql, { variables: {...filters from localstorage} })
// when filters changed
useEffect(() => {
refetch({variable: {...changed filters}})
}, [filters])
对于修改后的过滤器,是否可以执行refetch({variables: {...modified filters}})
?
使用useLazyQuery
,我可以这样做:
const [getData, {data, loading, refetch}] = useLazyQuery(gql)
// first fetch
useEffect(() => {
getData({variables: {...filters from localstorage}})
}, [])
// when filters changed
useEffect(() => {
refetch({variable: {...changed filters}}) // ?
// or
getData({variables: {...modified filters}}) // ?
}, [filters])
refetch
或getData
,我应该使用哪个?
答案 0 :(得分:0)
我认为您应该只使用 useQuery ,但不要将您的过滤器保留在localeStorage中,而还要使其保持在语言环境React状态。因此,当您更新过滤器状态时,useQuery将知道并使用新参数重新查询。而且您不需要单独的useEffect来触发重新获取。