React 16.8 +, Composant fonctionnel
const ScrollDemo = () => {
const myRef = useRef(null)
const executeScroll = () => myRef.current.scrollIntoView()
// run this function from an event handler or an effect to execute scroll
return (
<>
<div ref={myRef}>Element to scroll to</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}>Element to scroll to</div>
}
executeScroll = () => this.myRef.current.scrollIntoView()
// run this method to execute scrolling.
}
Composant de classe - Ref callback
class ReadyToScroll extends Component {
render() {
return <div ref={ (ref) => this.myRef=ref }>Element to scroll to</div>
}
executeScroll = () => this.myRef.scrollIntoView()
// run this method to execute scrolling.
}
N'utilisez pas d'arbitres de cordes.
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 un héritage et sont susceptibles d'être supprimées dans l'un ou l'autre des cas. être supprimées dans l'une des futures versions. Documentation officielle de React]
ressource1 ressources2
Facultatif : Animation de défilement lisse
/* css */
html {
scroll-behavior: smooth;
}
Passer la référence à un enfant
Nous voulons que la référence soit attachée à un élément dom, et non à un composant react. Ainsi, lorsque nous le passons à un composant enfant, nous ne pouvons pas nommer le prop ref.
const MyComponent = () => {
const myRef = useRef(null)
return <ChildComp refProp={myRef}></ChildComp>
}
Attachez ensuite la ref prop à un élément dom.
const ChildComp = (props) => {
return <div ref={props.refProp} />
}
1 votes
Pour une solution groupée : npmjs.com/package/react-scroll-to-component