javascript - 在 React Hook 中调整大小时回调未触发
问题描述
我让控制台日志在每次调整大小时在挂钩内触发,但是在回调中传递给调整大小挂钩的控制台日志永远不会触发。
这是我拥有的钩子,它根据详尽的 deps eslint 插件使用 useCallbacks:
// @flow
import { useCallback, useEffect } from 'react';
let resizeId: AnimationFrameID;
export const useResize = (callbackFn: Function, ref?: any) => {
const resizeUpdate = useCallback(() => {
console.log('inside');
callbackFn();
}, [callbackFn]);
const handleResize = useCallback(() => {
cancelAnimationFrame(resizeId);
resizeId = requestAnimationFrame(resizeUpdate);
}, [resizeUpdate]);
const handleOrientation = useCallback(() => {
// After orientationchange, add a one-time resize event
const afterOrientationChange = () => {
handleResize();
// Remove the resize event listener after it has executed
window.removeEventListener('resize', afterOrientationChange);
};
window.addEventListener('resize', afterOrientationChange);
}, [handleResize]);
useEffect(() => {
if (typeof ResizeObserver === 'function' && ref && ref.current) {
let resizeObserver = new ResizeObserver(() => handleResize());
resizeObserver.observe(ref.current);
return () => {
if (!resizeObserver) {
return;
}
resizeObserver.disconnect();
resizeObserver = null;
};
} else {
window.addEventListener('resize', handleResize);
window.addEventListener('orientationchange', handleOrientation);
return () => {
window.removeEventListener('resize', handleResize);
window.removeEventListener('orientationchange', handleOrientation);
cancelAnimationFrame(resizeId);
};
}
}, [callbackFn, handleOrientation, handleResize, ref]);
};
export default useResize;
以下是在组件中使用它的方式:
...
const setContentRef = () => {
console.log('resize');
};
useResize(setContentRef);
...
解决方案
推荐阅读
- scala - 使用 AtLeastOnceDelivery 处理自定义邮箱和持久性参与者
- scala - SparkSession 使用 [error] 日志记录到控制台
- java - 如果我选中所有复选框,为什么它显示我的答案是正确的?
- python - 无论如何要在lambdify中使用一组解决方案
- firebase - Firebase 云存储上传进度 (<256kb)
- php - 文件或文件夹存在,但在 IIS Web 服务器中抛出 404
- python - 如何为 python 脚本导入 LD_LIBRARY_PATH?没有root权限。没有权限重启apache服务器
- ios - 如何使用 init 初始化带有文本的单元格
- java - 为什么证书中的公钥为空
- sql - 在具有 MAX 聚合的 SQL 中使用 GROUP BY 并选择不在 GROUP BY 语句中的附加列