首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用useMemo而不改变依赖关系。

调用useMemo而不改变依赖关系。
EN

Stack Overflow用户
提问于 2022-09-16 05:41:47
回答 1查看 43关注 0票数 0

我正在使用React 17,并试图移动一些redux数据来响应查询。

redux中的一个常见功能是对api数据进行按摩,并将其存储给所有使用者。

我试图通过react查询复制相同的功能。如果api调用第一次成功,我想按摩api返回的数据,并将其保存在useMemo中。

代码语言:javascript
复制
function massageCategoriesData(data){
// ...some computation here...
}

const useDataCategories = () => {
  const query = useQuery(
    ['categories'],
    () => api.fetchCategories(),
    { staleTime: Infinity, cacheTime: Infinity },
  );

  const { data, isSuccess } = query;

  const finalData = useMemo(() => {
    if (isSuccess) {
      return massageCategoriesData(data);
    }
    return null;
  }, [query.isSuccess]);

  return {
    query,
    data: finalData,
  };
};

但问题是,当我从一次又一次卸载和挂载的组件中调用useDataCategories时,每次都会发生按摩,而useMemo不起作用。

我试着阅读官方文件,他们是这么说的:

请帮帮我!useMemo的行为也依赖于其他事物吗?

EN

回答 1

Stack Overflow用户

发布于 2022-09-18 07:38:58

您可能希望在queryFn本身内这样做:

代码语言:javascript
复制
const useDataCategories = () => {
  const query = useQuery(
    ['categories'],
    async () => {
      const data = await api.fetchCategories()
      return massageCategoriesData(data)
    }
    { staleTime: Infinity, cacheTime: Infinity },
  );

我在这里详细介绍了不同的方法及其权衡:https://tkdodo.eu/blog/react-query-data-transformations

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73740335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档