반응식 16.8 +, 기능 컴포넌트
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>
</>
)
}
StackBlits에 대한 전체 데모를 보려면 여기를 클릭하십시오.
반응 16.3 +, 클래스 구성 요소
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.
}
클래스 컴포넌트-Ref 콜백
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.
}
문자열 참조를 사용하지 마십시오.
문자열 참조는 성능에 해를 끼치며 구성 할 수 없으며 나갈 것입니다 (2018 년 8 월).
문자열 참조에는 몇 가지 문제가 있으며 레거시로 간주되며 향후 릴리스 중 하나에서 제거 될 수 있습니다. [공식 리 액트 문서]
resource1 resource2
선택 사항 : 스크롤 애니메이션 다듬기
/* css */
html {
scroll-behavior: smooth;
}
아이에게 심판을 전달
우리는 ref가 반응 요소가 아닌 dom 요소에 부착되기를 원합니다. 따라서 하위 컴포넌트로 전달할 때 prop ref의 이름을 지정할 수 없습니다.
const MyComponent = () => {
const myRef = useRef(null)
return <ChildComp refProp={myRef}></ChildComp>
}
그런 다음 심판 소품을 돔 요소에 부착하십시오.
const ChildComp = (props) => {
return <div ref={props.refProp} />
}