일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자바 공부
- 자바
- React JS
- react
- useState
- 디자인 패턴
- 코딩테스트 고득점 Kit
- 코딩테스트 고득점 Kit 완전탐색
- codesandbox
- Java
- react hook
- vanillaJS
- react firebase
- 리액트
- 컴퓨터 네트워크
- useEffect
- NextJS
- 백준
- 자바스크립트
- 코틀린
- 프로그래밍 언어론
- 프로그래머스 완전탐색
- JavaScript
- 데이터모델링과마이닝
- websocket
- design pattern
- 리액트 훅
- 프로그래머스
- 프로그래머스 자바
- 장고
Archives
- Today
- Total
기록하는 개발자
[React] React Hook-2.5 useEffect를 활용한 useScroll 본문
728x90
< 초기 화면 >
< 스크롤 바가 500을 초과하면 font color 변경>
< App.js >
import React, { useRef, useEffect, useState } from "react";
import ReactDOM from "react-dom";
const useScroll = () => {
const [state, setState] = useState({
x: 0,
y: 0
});
const onScroll = () => {
setState({ x: window.scrollX, y: window.scrollY });
};
useEffect(() => {
window.addEventListener("scroll", onScroll);
return () => window.removeEventListener("scroll", onScroll);
}, []);
return state;
};
export default function App() {
const { y } = useScroll();
return (
<div className="App" style={{ height: "500vh" }}>
<h1 style={{ position: "fixed", color: y > 500 ? "red" : "blue" }}>Hi</h1>
</div>
);
}
< useScroll() >
const useScroll = () => {
const [state, setState] = useState({
x: 0,
y: 0
});
const onScroll = () => {
setState({ x: window.scrollX, y: window.scrollY });
};
useEffect(() => {
window.addEventListener("scroll", onScroll);
return () => window.removeEventListener("scroll", onScroll);
}, []);
return state;
};
1.
const useScroll = () => {
const [state, setState] = useState({
x: 0,
y: 0
});
- useState를 x : 0, y : 0 으로 초기화한다. → state가 { x:0, y:0} 으로 초기화된다.
2.
const onScroll = () => {
setState({ x: window.scrollX, y: window.scrollY });
};
- onScroll 함수 : 현재 윈도우 스크롤 바의 x, y좌표로 state를 수정한다.
3.
useEffect(() => {
window.addEventListener("scroll", onScroll);
return () => window.removeEventListener("scroll", onScroll);
}, []);
return state;
};
- useEffect 함수 : window에 onScroll event listener를 추가하고 해당 event에 대한 remove event listener를 return 한다.
- useScroll 함수는 state( {x : ?, y : ?} )를 반환한다.
< App() >
export default function App() {
const { y } = useScroll();
return (
<div className="App" style={{ height: "500vh" }}>
<h1 style={{ position: "fixed", color: y > 500 ? "red" : "blue" }}>Hi</h1>
</div>
);
}
- useScroll의 return 값에서 y값을 가져온다.
- y값이 500을 초과하면 color가 red로 변경된다.
728x90
'Web > React' 카테고리의 다른 글
[React, Firebase] TwitterCloneCoding 0.0 초기 환경 설정 및 firebase 설치 (0) | 2021.10.11 |
---|---|
[React] React Hook-2.6 useEffect를 활용한 useFadeIn (0) | 2021.10.03 |
[React] React Hook-2.4 useEffect를 활용한 useBeforeLeave (0) | 2021.10.03 |
[React] React Hook-2.3 useConfirm과 usePreventLeave (0) | 2021.09.30 |
[React] React Hook-2.2 useEffect를 활용한 useClick과 useRef (0) | 2021.09.30 |