Bereaksi 16.8 +, Komponen fungsional
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>
</>
)
}
Klik di sini untuk demo lengkap tentang StackBlits
Bereaksi 16.3 +, Komponen kelas
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.
}
Komponen kelas - Ref callback
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.
}
Jangan gunakan String ref.
String merusak kinerja, tidak dapat dikomposasikan, dan sedang dalam perjalanan keluar (Agustus 2018).
string ref memiliki beberapa masalah, dianggap sebagai warisan, dan kemungkinan akan dihapus di salah satu rilis mendatang. [Dokumentasi Bereaksi Resmi]
resource1 resource2
Opsional: Smoothe scroll animation
/* css */
html {
scroll-behavior: smooth;
}
Memberikan referensi kepada seorang anak
Kami ingin ref dilampirkan ke elemen dom, bukan ke komponen reaksi. Jadi ketika meneruskannya ke komponen anak, kita tidak bisa menyebutkan nama prop.
const MyComponent = () => {
const myRef = useRef(null)
return <ChildComp refProp={myRef}></ChildComp>
}
Kemudian pasang prop ref ke elemen dom.
const ChildComp = (props) => {
return <div ref={props.refProp} />
}