React 16.8 +, composant fonctionnel
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>
</>
)
}
Cliquez ici pour une démo complète sur StackBlits
React 16.3 +, composant de classe
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.
}
Composant de classe - Rappel de référence
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.
}
N'utilisez pas de références String.
Les références de chaîne nuisent aux performances, ne sont pas composables et sont en voie de disparition (août 2018).
Les références de chaîne ont quelques problèmes, sont considérées comme héritées et sont susceptibles d'être supprimées dans l'une des futures versions. [Documentation officielle React]
ressource1 ressource2
Facultatif: animation de défilement lisse
/* css */
html {
scroll-behavior: smooth;
}
Passer ref à un enfant
Nous voulons que la référence soit attachée à un élément dom, pas à un composant de réaction. Ainsi, lorsque nous le passons à un composant enfant, nous ne pouvons pas nommer la référence prop.
const MyComponent = () => {
const myRef = useRef(null)
return <ChildComp refProp={myRef}></ChildComp>
}
Ensuite, attachez le prop de référence à un élément dom.
const ChildComp = (props) => {
return <div ref={props.refProp} />
}