微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

阿波罗useLazyQuery绕过缓存

如何解决阿波罗useLazyQuery绕过缓存

我正在使用@apollo/client useLazyQuery挂钩在应用程序中构建忘记的功能。第一次单击按钮时,它将发送电子邮件调用后端API,但是第二次单击时,依此类推..它将仅返回从后端做出的先前响应,这意味着不点击后端API。

export const Form: React.FC<Props> = ({ setStatus }) => {
  const [getResetLink,{ loading,data }] = useLazyQuery(FORGOT_PASSWORD)
  
  console.log(data,loading," => Query")

  const onSubmit = (data: any) => {
    const email = data[" "]
    getResetLink({ variables: { email } })
  }

  return (
      <form onSubmit={handleSubmit(onSubmit)}>
        <Input
          label=" "
          placeholder="eg. alex@gmail.com"
          register={register}
          required={true}
        />

        <Button btnType={true} type="primary" width="100%">
          Submit
        </Button>
      </form>
  )
}

不用担心表格,我正在使用react hook form。只需要解决这个问题。假设,一个用户忘记了密码,然后他通过电子邮件将其保留。不幸的是,他没有收到第一次尝试的电子邮件。他会再试一次,但是现在他接受了之前的回复,不会再向后端发出其他请求。我很确定阿波罗useLazyQuery有问题。我们如何绕过缓存?基本上,它从缓存中返回数据。

预先感谢您提供宝贵的答案!

解决方法

您可以重写钩子,将fetch policy设置为“无缓存”或“仅网络”

const [getResetLink,{ loading,data }] = useLazyQuery(FORGOT_PASSWORD,{fetchPolicy: 'no-cache'})

另一方面,您应该考虑使用Mutation而不是Query进行此操作,因为数据可能会发生一些变化。例如,您存储唯一的哈希或链接以重置密码或类似内容。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。