我有一个组件库,被几个应用程序使用,我使用一个回调函数作为useEffect中的一个 prop 传入。如果父组件没有,是否可以将其封装在子组件的useCallback中?而且父组件也不需要这样做。
const Parent = () => {
const cb = () => { ... };
return <Widget condition={true} callback={cb} />
};
const Widget = ({condition, callback}) => {
const safeCallback = useCallback(callback, [callback]);
useEffect(() => {
safeCallback();
}, [condition, safeCallback]);
}
如果父进程确实使用了useCallback,并且发生了两次,该怎么办?
const Parent = () => {
const cb = () => { ... };
const safeCb = useCallback(cb, [cb]);
return <Widget condition={true} callback={safeCb} />
};
const Widget = ({condition, callback}) => {
const safeCallback = useCallback(callback, [callback]);
useEffect(() => {
safeCallback();
}, [condition, safeCallback]);
}
1条答案
按热度按时间e7arh2l61#
首先你应该问问自己,如果你真的需要
useEffect
中的回调函数,也许它可以被重构到一个事件处理器中,你可以阅读更多关于摆脱here效果的内容。如果这不是一个选项的方式,你可以确保,不传递一个不稳定的引用
useEffect
是这样的: