如何以编程方式执行useLazyQuery?

时间:2019-10-14 15:53:20

标签: apollo react-apollo

好的,我知道React Apollo的useLazyQuery仅在其第一个参数被调用后才执行。但是令我失望的是,得知它的行为类似于useQuery

因此:如何控制useLazyQuery何时触发?我的用例非常简单:我有一个“自动完成”搜索栏。我不想在输入为空时查询。我可以在第一个“空虚”时轻松地做到这一点,但是当用户删除整个输入时,我找不到找到禁用查询的方法。

2 个答案:

答案 0 :(得分:1)

好的,甚至在我发布之前就找到了答案:)

看起来像您的查询中包含变量,Apollo Client在提供变量之前不会运行它。所以对于我的用例:

const [execQuery, {data}] = useLazyQuery (QUERY_SEARCH)
useEffect (() => {
  str && (() => {
    execQuery ({variables: {str}})
  })()
}, [str])

const results = R.isEmpty (str) ? null : data

答案 1 :(得分:0)

我要去偷@Daniel的答案:)

以下代码实现了目标

const

skip = R.complement (H.isNotNilOrEmpty) (str),

{data} = useQuery (QUERY_SEARCH, {variables: {str}, skip}),

抱歉使用未定义的变量R和H,但希望方法名具有描述性