javascript - 当 useRef 元素的高度大于零时的事件
问题描述
我有很多照片缩略图,当列表加载时,我应该能够将其中一个缩略图滚动到视图中。
照片填充有map
功能,缩略图的容器 div 之一将给出ref
。
我试过useEffect:
useEffect(() => {
if (scrollRef.current && scrollRef.current instanceof HTMLDivElement) {
scrollRef.current.scrollIntoView({
behavior: 'auto',
block: 'center',
inline: 'center',
});
}
}, [scrollRef.current]);
问题是ref
或者ref.current
不能用作useEffect的依赖列表。我收到警告:
React Hook useEffect 有一个不必要的依赖:'scrollRef.current'。排除它或删除依赖数组。像'scrollRef.current'这样的可变值不是有效的依赖关系,因为改变它们不会重新渲染组件
更改时如何触发 useEffect 或其他功能ref.current
?我所说的变化是指它的 clientHeight 值变化。因为最初它为零,并且scrollIntoView
还不起作用。
解决方案
使用回调 ref。
function Example() {
const [divRef, setDivRef] = useState(null);
useEffect(() => {
if (divRef && divRef.clientHeight > 0) {
div.scrollIntoView({
behavior: 'auto',
block: 'center',
inline: 'center',
});
}
}, [divRef]);
return <div ref={setDivRef} />;
}
推荐阅读
- react-native - 当状态/道具改变时,反应原生动画部分列表跳到顶部
- azure - 同一 Azure 资源组项目中的多个逻辑应用
- swift - 如何让 App-to-Per-App VPN 在 MAC OSX 上运行?
- python - 计算每个 bin 中 numpy ndarray 的最大值
- android - 从 CameraPreview 获取图像
- javascript - .NET Core ViewModel 中的 IFormFile 属性导致 AJAX 请求停止
- webgl - 为什么我使用 GL.POINTS 绘制的这些体素不对齐?我该如何解决?
- oop - 这是不是太抽象了?
- java - 在 Java 8 中有没有更好的方法来检查这种情况?
- dart - 如何有条件地在飞镖中投射类型?