当 useRef 元素的高度大于零时的事件

Posted

技术标签:

【中文标题】当 useRef 元素的高度大于零时的事件【英文标题】:Event when useRef element have height more than zero 【发布时间】:2020-10-09 12:12:57 【问题描述】:

我有很多照片缩略图,当列表加载时,我应该能够将其中一个缩略图滚动到视图中。

照片使用map 函数填充,其中一个缩略图的容器div 将被赋予ref

我试过useEffect:

useEffect(() => 
    if (scrollRef.current && scrollRef.current instanceof htmlDivElement) 
        scrollRef.current.scrollIntoView(
            behavior: 'auto',
            block: 'center',
            inline: 'center',
        );
    
, [scrollRef.current]);

问题是refref.current不能作为useEffect的依赖列表。我收到警告:

React Hook useEffect 有一个不必要的依赖: 'scrollRef.current'。排除它或删除依赖数组。 像“scrollRef.current”这样的可变值不是有效的依赖项 因为改变它们不会重新渲染组件

ref.current 发生变化时,如何触发 useEffect 或其他一些功能?我所说的变化是指它的 clientHeight 值变化。因为一开始它是零,而scrollIntoView 还不能工作。

【问题讨论】:

【参考方案1】:

使用callback 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 />;

【讨论】:

以上是关于当 useRef 元素的高度大于零时的事件的主要内容,如果未能解决你的问题,请参考以下文章

为页面增加滚动事件侦听,当页面滚动高度大于200,在页面右下方出现 返回顶部 按钮

在可拖动事件上,元素随着滚动条窗口顶部的高度向下移动

ie7 relative问题:父元素使用relative,子元素使用absolute,子元素高度大于父级高度

当元素以角度加载时如何获取具有高度的元素? [复制]

重新排序 TableView 和节标题高度变为零时数据源不更新

scrollTop总是为0