디바운싱 및 제한은 빈번한 이벤트(예: 입력, 스크롤, 크기 조정)에 대한 응답으로 함수 실행 빈도를 제어하여 성능을 최적화하는 데 사용되는 기술입니다.
디바운싱은 마지막 호출 이후 특정 시간이 지날 때까지 함수 실행을 지연시킵니다.
import React, { useState, useEffect } from 'react'; const DebouncedSearch = () => { const [searchTerm, setSearchTerm] = useState(''); const [debouncedValue, setDebouncedValue] = useState(''); useEffect(() => { const handler = setTimeout(() => { setDebouncedValue(searchTerm); }, 500); // Delay of 500ms return () => { clearTimeout(handler); // Cleanup on input change }; }, [searchTerm]); useEffect(() => { if (debouncedValue) { console.log('API Call with:', debouncedValue); // Make API call here } }, [debouncedValue]); return ( <input type="text" placeholder="Search..." value={searchTerm} onChange={(e) => setSearchTerm(e.target.value)} /> ); }; export default DebouncedSearch;
제한 기능을 사용하면 해당 간격 동안 함수가 트리거된 횟수에 관계없이 지정된 시간 간격에 최대 한 번만 함수가 실행됩니다.
import React, { useEffect } from 'react'; const ThrottledScroll = () => { useEffect(() => { const handleScroll = throttle(() => { console.log('Scroll event fired'); }, 1000); // Execute at most once every 1000ms window.addEventListener('scroll', handleScroll); return () => { window.removeEventListener('scroll', handleScroll); }; }, []); return <div> <hr> <h3> <strong>3. Using Libraries (Optional)</strong> </h3> <p>Instead of implementing custom debounce/throttle, you can use popular libraries like:</p> <h4> <strong>Lodash</strong> </h4> <p>Install:<br> </p> <pre class="brush:php;toolbar:false">npm install lodash
사용법:
import { debounce, throttle } from 'lodash'; // Debounce Example const debouncedFunc = debounce(() => console.log('Debounced!'), 500); // Throttle Example const throttledFunc = throttle(() => console.log('Throttled!'), 1000);
설치:
npm install react-use
사용법:
import { useDebounce, useThrottle } from 'react-use'; const Demo = () => { const [value, setValue] = useState(''); const debouncedValue = useDebounce(value, 500); const throttledValue = useThrottle(value, 1000); useEffect(() => { console.log('Debounced:', debouncedValue); console.log('Throttled:', throttledValue); }, [debouncedValue, throttledValue]); return ( <input value={value} onChange={(e) => setValue(e.target.value)} placeholder="Type something..." /> ); }; export default Demo;
Feature | Debouncing | Throttling |
---|---|---|
Execution | Executes once after the user stops firing events for a specified time. | Executes at regular intervals during the event. |
Use Cases | Search input, resizing, form validation. | Scroll events, button clicks, API polling. |
Performance | Reduces the number of function calls. | Limits execution to once per interval. |
위 내용은 Reactjs에서 디바운싱/스로틀 기술을 사용하여 서버 부하 감소의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!