React의 useRef로 간단하게 특정 DOM 요소로 이동할 수 있다.
1. 디자인 구현
먼저 아래와 같은 간단한 디자인을 구현했다.
우측 상단에 navigation을 클릭하면 해당 content로 이동하는 구조이다.
import React from 'react'
export default function App() {
return (
<div>
<ul style={{position: "fixed", top: 0, right: 0, background: 'teal', padding: "20px"}}>
<li>content1</li>
<li>content2</li>
<li>content3</li>
</ul>
<div style={{height:'500px', background: 'skyblue'}}>content1</div>
<div style={{height:'500px', background: 'orange'}}>content2</div>
<div style={{height:'500px', background: 'gray'}}>content3</div>
</div>
)
}
2. 스크롤 이동 구현
useRef와 onClick 함수를 추가해준다.
useRef는 특정 DOM을 선택해서 조작할 수 있도록 해주는 React의 Hook이다.
import React, {useRef} from 'react'
export default function App() {
const content1Ref = useRef<HTMLDivElement>(null);
const content2Ref = useRef<HTMLDivElement>(null);
const content3Ref = useRef<HTMLDivElement>(null);
const onContent1Click = () => {
content1Ref.current?.scrollIntoView({ behavior: 'smooth' });
}
const onContent2Click = () => {
content2Ref.current?.scrollIntoView({ behavior: 'smooth' });
}
const onContent3Click = () => {
content3Ref.current?.scrollIntoView({ behavior: 'smooth' });
}
return (
<div>
<ul style={{position: "fixed", top: 0, right: 0, background: 'teal', padding: "20px"}}>
<li onClick={onContent1Click}>content1</li>
<li onClick={onContent2Click}>content2</li>
<li onClick={onContent3Click}>content3</li>
</ul>
<div ref={content1Ref} style={{height:'500px', background: 'skyblue'}}>content1</div>
<div ref={content2Ref} style={{height:'500px', background: 'orange'}}>content2</div>
<div ref={content3Ref} style={{height:'500px', background: 'gray'}}>content3</div>
</div>
)
}
scrollIntoView 메소드는 호출된 요소가 사용자에게 표시되도록 해당 위치로 스크롤한다.
우측에 content2 navigation을 클릭하면 content2로 이동되는 것을 확인할 수 있다.
3. a 태그로 같은 페이지에서 특정 위치로 이동하기
import React from 'react'
export default function App() {
return (
<div>
<ul style={{position: "fixed", top: 0, right: 0, background: 'teal', padding: "20px"}}>
<li><a href='#content1'>content1</a></li>
<li><a href='#content2'>content2</a></li>
<li><a href='#content3'>content3</a></li>
</ul>
<div id="content1" style={{height:'500px', background: 'skyblue'}}>content1</div>
<div id="content2" style={{height:'500px', background: 'orange'}}>content2</div>
<div id="content3" style={{height:'500px', background: 'gray'}}>content3</div>
</div>
)
}
href에 #(요소의)id를 입력해주면 간단하게 이동이 가능하다.
'React' 카테고리의 다른 글
[React] i18next 라이브러리로 다국어 처리하기 (0) | 2024.01.19 |
---|---|
[React] ag grid Row Data Transaction (0) | 2022.10.31 |
[React] CRA 시작 파일 정리 (2) | 2022.08.04 |
[React] React 코딩 컨벤션 정리 (0) | 2022.08.02 |
[React] React에서 Typescript + ESLint(Airbnb) + Prettier 적용하기 (0) | 2022.06.11 |