6. NextJS Header
Goal
- Shadcn CLI Install
- CSS Position relative,absoulte
- TailwindCss 반응형 디자인 방법
- useState > Drawer 상태관리
- useEffect > 스크롤 이벤트 감지
복습 포인트
1.Header 컴포넌트 만들기
2.Drawer Header 컴포넌트 만들기
6.1 Header
설명하기
랜더링 순서 : rootLayout vs layout vs page
6.2 Header > bg
더 알아보기 - CSS Position relative,absoulte / CSS의 z-index 속성 이해하기
https://www.daleseo.com/css-z-index/
https://creamilk88.tistory.com/197
6.3 Shadcn CLI Install
https://ui.shadcn.com/docs/components/avatar
6.4 relative, absoulte, sticky, padding
설명하기
CSS Position (relative, absolute,...) 에 따른 화면이 그려지는 순서
Ref
6.5 TailwindCss 반응형 디자인 방법
https://tailwindcss.com/docs/responsive-design
6.6 Header > search
6.7 Header > 반응형 만들기1
6.8 Header > 반응형 만들기2
6.9 Header > 반응형 만들기3
📌 리펙토링 - 스크롤 이벤트에 디바운싱 걸기
스크롤 이벤트는 콘솔로그를 찍어보면 매우 많이 발생하고 있습니다.
- 이는 성능저하의 원인이 될 수 있어요.
- 최적화를 해주세요. with 디바운싱
- 그리고 쓰로틀링(throttling)과 디바운싱(debouncing) 차이점은 무엇인가요?
힌트 :
디바운싱은 이벤트 핸들러가 연속적으로 발생하는 경우, 일정 시간 동안 마지막 이벤트만 처리하도록 하는 기술입니다. 이를 통해 성능을 최적화하고 불필요한 작업을 방지할 수 있습니다. useEffect 훅을 사용하여 스크롤링 이벤트에 디바운싱을 적용하는 예제를 보여드리겠습니다.
import React, { useState, useEffect } from 'react';
function ScrollComponent() {
const [scrollY, setScrollY] = useState(0);
useEffect(() => {
const handleScroll = () => {
// 스크롤 위치를 업데이트합니다.
setScrollY(window.scrollY);
};
const debouncedHandleScroll = debounce(handleScroll, 200); // 디바운싱 적용
window.addEventListener('scroll', debouncedHandleScroll);
return () => {
// 컴포넌트가 언마운트되면 이벤트 리스너를 제거합니다.
window.removeEventListener('scroll', debouncedHandleScroll);
};
}, []); // useEffect의 두 번째 매개변수로 빈 배열을 전달하여 한 번만 실행되도록 설정합니다.
// 스크롤 위치를 화면에 표시합니다.
return (
<div>
<p>현재 스크롤 위치: {scrollY}px</p>
{/* 여기에 다른 컴포넌트 및 내용 추가 가능 */}
</div>
);
}
// 디바운싱 함수
function debounce(func, wait) {
let timeout;
return function executedFunction(...args) {
const later = () => {
timeout = null;
func(...args);
};
clearTimeout(timeout);
timeout = setTimeout(later, wait);
};
}
export default ScrollComponent;
이 예제는 스크롤 위치를 추적하고, 스크롤 이벤트가 발생할 때마다 스크롤 위치를 갱신합니다. 그러나 디바운싱 함수를 통해 스크롤 이벤트 핸들러가 호출되는 속도를 제어하여 성능을 최적화합니다.
참고