javascript - 如何在每次输入更改时获取现有缓存数据?

标签 javascript reactjs react-hooks react-hook-form react-query

我的应用程序有一个用户输入一个id作为请求发送以及匹配的响应数据 id 已呈现。

如果数据已存在于缓存中,我希望应用程序从每个输入的缓存中获取更改

如果缓存中不存在数据,则应用程序只能通过让用户单击来发送请求提交按钮

一旦用户输入输入,我将访问缓存并检查当前输入id是否存在于每个输入上改变。如果是这样,请在提交按钮禁用时渲染数据。否则启用提交按钮,以便用户可以发送请求

根据研究,React Query's queryClient.getQueryCache是我相信我需要的。我将通过在 queryCache 上使用 .includes 来检查输入 id 是否存在于 cache 中。之后我该怎么办?这是实现该功能的正确方向吗?

这是我当前的设置。请让我知道如何继续实现所请求的功能。 https://codesandbox.io/s/rick-and-morty-2gy8r?file=/src/App.js

const handleRickAndMortyFetch = () => {
  return delay()
    .then(() => axios(`https://rickandmortyapi.com/api/character/${idQuery}`))
    .then((res) => res.data);
  };

const cacheData = queryClient.getQueryData(["rickandmorty", idQuery], {
    exact: false
})

const onInputChange = event => {
    setIdQuery(event.target.value, () => {
        cacheData.includes(idQuery)
            handleRickAndMortyFetch()
    })
}

const disable = isLoading || parseFloat(formId) === idQuery || !idQuery || cacheData?.id === idQuery;

<form onSubmit={handleSubmit(onSubmit)}>
  <input
    type="number"
    name="rickAndMortyId"
    placeholder="Between 1 and 671"
    ref={register}
    disabled={isLoading}
    onChange={onInputChange}
  />
  <button type="submit" disabled={disable}>
    Search Character
  </button>
</form>

最佳答案

我认为你想要的是queryClient.getQueryData(["rickandmorty", idQuery])。这将为您提供特定 queryKey 的缓存数据。如果该值未定义,则说明您的缓存中没有该键的数据,因此您可以启用提交按钮。

但是你需要让react-query为你管理数据。这意味着您的 handleRickAndMortyFetch 函数应该返回一个 Promise - 无需使用本地状态 (rickAndMortyCharacter) - 这只是 从react-query返回的data属性

关于javascript - 如何在每次输入更改时获取现有缓存数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66862777/

相关文章:

javascript - 如何使组件 "wait"在react中更新状态?

javascript - 在与钩子(Hook) react 时更新具有唯一值的对象内的数组

javascript - 在 Javascript 中获取父元素的正确 event.target?

javascript - 无法使用 jquery 上传文件

javascript - 使用javascript在字符串中查找电子邮件地址

javascript - 在 React 中使用 onClick 处理程序维护 href "open in new tab"

javascript - 在 nginx 中使用带代理的预渲染

reactjs - ACE 编辑器的薄包装,用于制作 React 组件

javascript - ReactJS setState 中的 this.state

javascript - onClick 函数需要两次单击才能更新状态