Phản ứng 16.8 +, thành phần chức năng
import React, { useRef } from 'react'
const scrollToRef = (ref) => window.scrollTo(0, ref.current.offsetTop)
// General scroll to element function
const ScrollDemo = () => {
const myRef = useRef(null)
const executeScroll = () => scrollToRef(myRef)
return (
<>
<div ref={myRef}>I wanna be seen</div>
<button onClick={executeScroll}> Click to scroll </button>
</>
)
}
Bấm vào đây để xem bản demo đầy đủ trên StackBlits
Phản ứng 16.3 +, thành phần lớp
class ReadyToScroll extends Component {
constructor(props) {
super(props)
this.myRef = React.createRef()
}
render() {
return <div ref={this.myRef}></div>
}
scrollToMyRef = () => window.scrollTo(0, this.myRef.current.offsetTop)
// run this method to execute scrolling.
}
Thành phần lớp - Gọi lại tham chiếu
class ReadyToScroll extends Component {
myRef=null
// Optional
render() {
return <div ref={ (ref) => this.myRef=ref }></div>
}
scrollToMyRef = () => window.scrollTo(0, this.myRef.offsetTop)
// run this method to execute scrolling.
}
Đừng sử dụng chuỗi refs.
Chuỗi giới thiệu gây hại cho hiệu suất, không thể kết hợp được và đang trên đường ra (tháng 8 năm 2018).
chuỗi giới thiệu có một số vấn đề, được coi là di sản và có khả năng bị xóa trong một trong các phiên bản tương lai. [Tài liệu phản ứng chính thức]
tài nguyên1 resource2
Tùy chọn: Làm mượt hoạt hình cuộn
/* css */
html {
scroll-behavior: smooth;
}
Truyền ref cho một đứa trẻ
Chúng tôi muốn ref được gắn vào một phần tử dom chứ không phải thành phần phản ứng. Vì vậy, khi chuyển nó cho một thành phần con, chúng ta không thể đặt tên cho prop ref.
const MyComponent = () => {
const myRef = useRef(null)
return <ChildComp refProp={myRef}></ChildComp>
}
Sau đó gắn ref prop vào một phần tử dom.
const ChildComp = (props) => {
return <div ref={props.refProp} />
}