ํ๋ก์ ํธ์ ๊ฒ์ ๊ธฐ๋ฅ์ ํ ๊ธ์์ฉ ์
๋ ฅ์ด ๋ ๋๋ง๋ค ๊ทธ ๊ฐ์ผ๋ก API ์์ฒญ์ ํ๋๋ก ๊ตฌํํ๋ค.
ํ์ ์ด์์ ์์ฒญ์ด ๋ฐ์ํ ๊ฒ์ด๋ผ ์๊ฐํ์๊ณ , ์ค์ ๋ก ์ฒด๊ฐ ์๊ฐ๋ ๊ธธ์๋ค.๐ ์ผ๋จ ๋ง๊ฐ ๋ ์ง๋ฅผ ์งํค๋๋ผ ์ด๋๋ก ๊ตฌํํ๊ณ ๋ฆฌํฉํ ๋ง ๊ธฐ๊ฐ ๋์ ์ฑ๋ฅ ๊ฐ์ ์ ํด๋ณด๊ธฐ๋ก ํจโ
์ฐพ์๋ณด๋, Debounce
๊ธฐ๋ฅ์ ์ ์ฉํด ์์ฒญ์ ์ค์ด๋ ๋ฐฉ๋ฒ์ด ์์๊ณ , ํ๋ก์ ํธ์ ์ ์ฉํด๋ณด๊ธฐ๋ก ๊ฒฐ์ ๐คฉ
useEffect
๋ฅผ ์ฌ์ฉํ์ฌ ์
๋ ฅ๊ฐ query
๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ๋๋ฐ์ด์ค๋ฅผ ์ ์ฉํ์ฌ API ์์ฒญ ์ง์ฐ์ํด
ํ์ด์ง ๋ด์์ ์ฌ์ฉ
// DebouncedSearch.jsx
import React, { useState, useEffect } from 'react';
function DebouncedSearch() {
const [query, setQuery] = useState('');
const [searchResults, setSearchResults] = useState([]);
// ์
๋ ฅ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ํ์ด๋จธ ์ค์
useEffect(() => {
const delayDebounceTimer = setTimeout(() => {
// ์ฌ๊ธฐ์ API ์์ฒญ ์ฝ๋ ๋ฃ์ผ๋ฉด ๋จ
// ๋ฐ์์จ ๊ฐ์ setSearchResults์ ์ ์ฅ
}, 1000); // 1s ๋๋ฐ์ด์ค ์ง์ฐ ์๊ฐ
// ์ด์ ์ ์ค์ ํ ํ์ด๋จธ๋ฅผ ํด๋ฆฌ์ดํ์ฌ ๋๋ฐ์ด์ค ์ทจ์
return () => clearTimeout(delayDebounceTimer);
}, [query]);
function handleInputChange(event) {
setQuery(event.target.value);
}
return (
<div>
<input
type="text"
value={query}
onChange={handleInputChange}
placeholder="Search"
/>
<ul>
{searchResults.map((result, index) => (
<li key={index}>{result}</li>
))}
</ul>
</div>
);
}
export default DebouncedSearch;
// useDebounce.jsx
import { useEffect, useState } from 'react';
export default function useDebounce(value, delay) {
const [debouncedValue, setDebouncedValue] = useState(value)
useEffect(()=>{
const timer = setTimeout(()=>{
setDebouncedValue(value)
}, delay)
return () => clearTimeout(timer)
}, [value])
return debouncedValue
}
// DebouncedSearch.jsx
import React, { useState } from 'react';
import useDebounce from './useDebounce'; // useDebounce ์ปค์คํ
ํ
์ํฌํธ
function DebouncedSearch() {
const [query, setQuery] = useState('');
const [searchResults, setSearchResults] = useState([]);
const debouncedQuery = useDebounce(query, 1000); // 1s ๋๋ฐ์ด์ค ์ง์ฐ ์๊ฐ
useEffect(() => {
// ์ฌ๊ธฐ์ API ์์ฒญ ์ฝ๋ ๋ฃ์ผ๋ฉด ๋จ
// ๋ฐ์์จ ๊ฐ์ setSearchResults์ ์ ์ฅ
}, [debouncedQuery]);
function handleInputChange(event) {
setQuery(event.target.value);
}
return (
<div>
<input
type="text"
value={query}
onChange={handleInputChange}
placeholder="Search"
/>
<ul>
{searchResults.map((result, index) => (
<li key={index}>{result}</li>
))}
</ul>
</div>
);
}
export default DebouncedSearch;
tadak
๊ฒ์ ์ API ์์ฒญ
t โก๏ธ ta โก๏ธ tad โก๏ธ tada โก๏ธ tadak
tadak
ํ ๊ธ์์ฉ ์
๋ ฅ ํ ๋๋ง๋ค ์์ฒญ ๋ณด๋ด์งdelay๋ฅผ 1์ด๋ก ์ค์ ํ๊ณ
tadak
๊ฒ์ ์ API ์์ฒญ
tadak โก๏ธ 1์ด๋์ ์ ๋ ฅ ์์ ์ ์์ฒญ
์ฝ์
tadak
์ดํ 1์ด๋์ ์ถ๊ฐ ์
๋ ฅ์ด ์์ ๋ ํ๋ฒ๋ง ์์ฒญ ๋ณด๋ด์ง
๋คํธ์ํฌ
์ ์ฒด ์์ฒญ 12๊ฐ, ์๋ฃ๊น์ง ์ฝ 4.8์ด
์์ฒญ ํ์๊ฐ ๋์ ๋๊ฒ ์ค์๊ณ ,
๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ํ๋ฉด์ ๋ณด์ฌ์ค๋๊น์ง์ ์๊ฐ๋ ํ์ ํ ์ค ๊ฒ์ ๋ณผ ์ ์๋ค๐๐ปโ
Debounce
๊ธฐ๋ฅ์ ๊ฒ์ ๋ง๊ณ ๋ ๋ธ๋ผ์ฐ์ ์๋์ฐ ํฌ๊ธฐ ๋ฆฌ์ฌ์ด์ง, ์๋์์ฑ, ์ง๋ ํ๋ยท์ถ์ ๋ฑ ๋ง์ ๊ณณ์ ์ฌ์ฉ๋๋ค๊ณ ํ๋ ๋ค๋ฅธ ํ๋ก์ ํธ์์๋ ์ ์ฉํ๊ฒ ์ ์ฉํ ์ ์์๊ฑฐ๊ฐ๋ค๐ค