如何滚动到一个元素?

我有一个聊天窗口小部件,每次我向上滚动时都会弹出一系列消息。我现在面临的问题是,当消息加载时,滑块固定在顶部。我希望它关注上一个数组中的最后一个索引元素。我发现我可以通过传递索引来生成动态引用,但我还需要知道使用什么样的滚动函数来实现这一点

handleScrollToElement(事件){
const tesNode=ReactDOM.findDOMNode(this.refs.test)
如果(某些逻辑){
//滚动到testNode
}
}
render(){
返回(
<div>
<div ref=“test”>lt;/div>
</div>)
}

反应16.8+,功能部件

constscrolldemo=()=>{
常量myRef=useRef(空)
const executeScroll=()=>myRef.current.scrollIntoView()
//从事件处理程序或效果运行此函数以执行滚动
返回(
<>
<div ref={myRef}>元素滚动到</div>
<button onClick={executeScroll}>单击以滚动</button>
</>
)
}

单击此处查看StackBlits的完整演示

反应16.3+,级组件

类ReadyToScroll扩展组件{
建造师(道具){
超级(道具)
this.myRef=React.createRef()
}
render(){
返回<div ref={this.myRef}>元素以滚动到</div>
}  
executeScroll=()=>this.myRef.current.scrollIntoView()
//运行此方法以执行滚动。
}

类组件-Ref回调

类ReadyToScroll扩展组件{
render(){
返回<div ref={(ref)=>this.myRef=ref}>元素以滚动到</div>
} 
executeScroll=()=>this.myRef.scrollIntoView()
//运行此方法以执行滚动。
}

不要使用字符串引用

字符串引用损害性能,不可组合,并且正在退出(2018年8月)

字符串引用有一些问题,被认为是遗留的,并且很可能
将在将来的某个版本中删除。[正式文件]

资源1资源2

可选:平滑滚动动画

/*css*/
html{
滚动行为:平滑;
}

把裁判传给孩子

我们希望将ref附加到dom元素,而不是react组件。因此,当将其传递给子组件时,我们无法命名prop ref

常量MyComponent=()=>{
常量myRef=useRef(空)
return<ChildComp refProp={myRef}></ChildComp>
} 

然后将ref prop附加到dom元素

const ChildComp=(道具)=>{
return<div ref={props.refProp}/>
}

发表评论