将函数转换为useCallback

托马斯·瓦兹奇克(Tomasz Waszczyk)

我想重写一个像这样的函数:

function useQuery() {
  return new URLSearchParams(useLocation().search);
}

被React首选useCallback,我的最佳猜测是:

const useQuery = useCallback(
  () => {
    return new URLSearchParams(useLocation().search);
  },
  [useLocation]
);

我得到的错误:

无法在回调内部调用React Hook的“ useLocation”。React Hooks必须在React函数组件或自定义的React Hook函数中调用react-hooks / rules-of-hooks

这是否意味着我无法将函数转换为useCallback

大卫

useLocation是一个钩子,应直接在组件中调用。但是,结果可以在回调中使用。例如:

const location = useLocation();
const useQuery = useCallback(
    () => {
        return new URLSearchParams(location.search);
    },
    [location]
);

尽管既然location是一个对象,并且您实际上只关心search值,但是useCallback使用简单的值来确定钩子更改内容的比较可能更准确:

const { search } = useLocation();
const useQuery = useCallback(
    () => {
        return new URLSearchParams(search);
    },
    [search]
);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章