gpt4 book ai didi

javascript - 检查函数是否由 useCallback 创建?

转载 作者:行者123 更新时间:2023-12-04 17:25:13 25 4
gpt4 key购买 nike

我有接受函数作为参数的钩子(Hook)。如果功能发生不必要的更改,则可能会导致额外的重新渲染。我想确保函数用 useCallback 包装。

即这是一个简化版本:

function useApi({ onSuccess }) {
if (process.env.NODE_ENV !== 'production' && !isUseCallback(onSuccess)) {
throw new Error();
}

useEffect(() => {
fetch(...)
.then(res => res.json())
.then(onSuccess);
}, [onSuccess]);
}

如果 onSuccess 发生不必要的更改,那么它将不必要地调用 API。是否可以使用 isUseCallback 函数?我想我必须编写一个自定义的 useCallback 来包装 React 的 useCallback

最佳答案

您可以将回调包装在 useRef() 中以确保 useEffect() 回调具有对最近的 onSuccess 的引用:

function useApi({ onSuccess }) {
const ref = useRef();

ref.current = onSuccess;

useEffect(() => {
fetch(...)
.then(res => res.json())
.then(val => ref.current(val));
}, []);
}

重要的是你写 .then(val => ref.current(val)) 而不仅仅是 .then(ref.current) 这样属性访问ref.currentfetch() 解析之前不会发生。这样 ref.current 等于传递给 useApi() 的最近的 onSuccess

关于javascript - 检查函数是否由 useCallback 创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63786538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com