【发布时间】:2021-07-01 18:19:45
【问题描述】:
我的应用程序有一个用户输入query,然后获取response data,也是cached。
对于每个cache data,我想为每个previous query 显示一个按钮,用户可以单击该按钮以在屏幕上再次加载该数据。
假设我首先输入 id 1,然后 data 是 cached 并渲染。当我用Object.values(cacheData.queriesMap) 登录我的cached data 时,我收到{["rickandmorty",0]: Query, ["rickandmorty","1"]: Query}。我现在想遍历我的缓存数据并显示每个单独的查询。
// <Home />
const cachedCharacters = Object.values(cacheData.queriesMap).map(character => (
<button>{character.state.data.name}</button>
))
return (
<div>
{cachedCharacters}
</div>
)
但是,我收到了TypeError: Cannot read property 'name' of undefined。我怀疑这个错误的原因是因为第一个查询是["rickandmorty",0],这是应用程序在挂载时获取的不存在的项目。
然后我将我的应用程序设置为在组件安装时禁用获取。
// <Home/>
const { isLoading, error, data } = useQuery(
["rickandmorty", idQuery],
handleRickAndMortyFetch,
{
enabled: false || idQuery !== 0,
);
然而,应用程序仍然在安装时进行初始提取。如果我首先输入 id 1,我会再次收到 {["rickandmorty",0]: Query, ["rickandmorty","1"]: Query}。
如果initial fetch 是阻止每个cache data 呈现的原因,如果enabled: false 不起作用,我该如何disable initial fetch?如果阻止呈现每个单独的缓存数据是一个不同的问题,请提出解决方案。 https://codesandbox.io/s/rick-and-morty-render-cache-data-8dv6y
【问题讨论】:
标签: reactjs react-hooks react-hook-form react-query