gpt4 book ai didi

javascript - 有没有办法记住从参数传递的函数 - (useCallback) exhaustive-deps

转载 作者:行者123 更新时间:2023-12-04 10:54:47 27 4
gpt4 key购买 nike

所以我有这个小片段:

const useTest = (callbackFunc) => {
const user = useSelector(selector.getUser); // a value from store

useEffect(() => {
if (user.id === 1) {
callbackFunc()
}
}, [callbackFunc, user.id])

}

在上面的代码中,如果 callbackFunc 在传递之前未被内存(包装在 useCallback 中),则 useEffect 将触发无限循环。

将函数包装在钩子(Hook)内的 useCallback 上仍会触发无限循环,所以这是不对的:

const cb = () => useCallback(() => callbackFunc, [callbackFunc]);

因为 callbackFunc 以上会触发无限循环。

YES 我很清楚我可以在传递给这个钩子(Hook)之前将函数包装在 useCallback 中,我唯一的问题是:很有可能其他/ future 的开发者在调用这个钩子(Hook)时只会传递一个非内存函数,这就是我担心的地方。 `

由于 exhaustive-deps,我无法删除 useEffect/useCallback 第二个参数数组上的 callbackFunc > 规则 - 并删除它(或在这一行)也被更高的开发者禁止。

知道我怎样才能实现我的目标吗?如果没有,那么我会祈祷其他开发者在使用它之前先阅读钩子(Hook)。

最佳答案

你可以这样做,但你将无法再修改回调

const funcRef = React.useRef(null)
useEffect(() => {
funcRef = callbackFunc
}, [])

useEffect(() => {
if (funcRef.current){
if (user.id === 1) {
funcRef.current()
}
}
}, [funcRef, user.id])

关于javascript - 有没有办法记住从参数传递的函数 - (useCallback) exhaustive-deps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59281785/

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