디바운싱(debouncing)을 적용하여 불필요한 상태 변경과 렌더링을 줄이고, 필요한 경우 커스텀 훅(custom hook)을 사용하는 방법이 포함됩니다.
기존 방식
// SearchBar.js
function SearchBar({ onChange }) {
return (
<input
type="text"
placeholder="강의 검색..."
onChange={(e) => onChange(e.target.value)}
/>
);
}
디바운싱(Debouncing) 적용
사용자가 입력할 때마다 즉시 상태를 업데이트하는 대신, 디바운싱을 적용하여 연속적인 입력에 대한 상태 업데이트를 지연시킬 수 있습니다. 이 방법은 연속적인 입력에서 발생하는 불필요한 렌더링을 줄여 성능을 향상시킵니다.
import { useState, useEffect } from "react";
function useDebounce(value, delay) {
const [debouncedValue, setDebouncedValue] = useState(value);
useEffect(() => {
const handler = setTimeout(() => {
setDebouncedValue(value);
}, delay);
return () => {
clearTimeout(handler);
};
}, [value, delay]);
return debouncedValue;
}
function SearchBar({ onChange }) {
const [inputValue, setInputValue] = useState("");
const debouncedSearchTerm = useDebounce(inputValue, 500); // 500ms 지연
useEffect(() => {
onChange(debouncedSearchTerm);
}, [debouncedSearchTerm, onChange]);
return (
<input
type="text"
placeholder="강의 검색..."
value={inputValue}
onChange={(e) => setInputValue(e.target.value)}
/>
);
}
이 코드에서 useDebounce 커스텀 훅은 지정된 지연 시간 후에만 입력값을 onChange에 전달합니다. 사용자가 타이핑을 멈추고 지정된 시간이 지나면 입력값이 업데이트됩니다.
'개발' 카테고리의 다른 글
인증 방식 선택에 대한 고민과 고찰 (Session vs Token)[Feat. 레디베리] (1) | 2024.07.03 |
---|---|
Redis로 RT 마이그레이션 적용기 및 유닛테스트 (0) | 2024.03.14 |
이화여대 외주 이미지 (0) | 2023.02.13 |
[React]공공데이터 포털 API 신청(+적용 2022.11.11) (1) | 2022.11.11 |
[React]redux 새로고침을 해도 값 유지시키기(state 값 유지시키기) (2) | 2022.10.14 |
댓글