ํฐ์คํ ๋ฆฌ ๋ทฐ
์ฐ๋นํํ ๋ง๋ ์๋๋ ์ ์ ๊ฒ์ ๊ธฐ๋ฅ ๋ฐ์ ์ํค๊ธฐ๐คฉ - 2
stable_sound 2023. 2. 24. 22:54useQuery๋ฅผ ํตํด ๊ฒ์์ด ์ ๋๋๋ก ๊ตฌํํด๋ ๊ธฐ์กด ์ฝ๋์์๋ input ์ฐฝ์ ๊ฒ์์ด๋ฅผ ์ ๋ ฅํ ๋๋ง๋ค ํธ์ถ์ ๊ณ์ ํ๊ณ ์์๋ค.
์๋ฅผ๋ค์ด "์ถ์" ์ ๊ฒ์ํ๊ณ ์ถ์๋ฐ ์ค์ ํธ์ถ์ "ใ , ์ถ, ์ถ, ์ถใ , ์ถ์, ์ถ์" ์ด๋ ๊ฒ ๋งค~๋ฒ ๋ค ๊ฐ๊ณ ์๋ ๊ฒ์ด๋ค.๐ฑ
๋ถํ์ํ ํธ์ถ์ ์ค์ด๊ณ ๊ฒ์์ด๋ฅผ ์ ๋ ฅ ํ ์ผ์ ์๊ฐ์ด ํ๋ฅด๋ฉด ํ๋ฒ๋ง ํธ์ถ์ด ๊ฐ๋๋ก ๋ฐ๊พธ์ด๋ณด์.
์ฌ๊ธฐ์ ๋๋ debounce๋ฅผ ์ฌ์ฉํด์ฃผ๋ ค๊ณ ํ๋ค!
์ฒ์ ๊ฒ์ ๊ธฐ๋ฅ์ ๊ตฌํํ์ ๋์๋ ์ ๋ง ๊ฒ์๋ง ๋๊ฒ ^^.. ์ฑ๋ฅ์ด๋ ์ต์ ํ๋ 1๋ ๊ณ ๋ คํ์ง์๊ณ ์ ๋ง ๊ฒ์๋ง ๋๋๋ก ํ๋๋ผ
๋๋ฐ์ด์ค๋ผ๋ ๊ฒ์ ๋ํด์ ์์ ๋ชฐ๋์๋ ๋ฐ๋ณด์๋ใท...ใ ....
์ด๋ฒ์ ๋์ถฉ ๋ง๋ค์ด๋ ๊ฒ์ ๊ธฐ๋ฅ์ ํ๋ํ๋ ๊ณ ์ณ๊ฐ๋ฉด์ ๋๋ฐ์ด์ค์ ๋ํด ์ฒ์ ์๊ฒ ๋์๋ค.
debouncing (๋๋ฐ์ด์ฑ) ์ ์ฐ์ด์ด ํธ์ถ๋๋ ํจ์๋ค ์ค์ ๋ง์ง๋ง ํจ์ (or ๊ฐ์ฅ ์ฒซ ํจ์) ๋ง ํธ์ถํ๋๋ก ํ๋ ๊ธฐ๋ฒ์ด๋ค.
์ปค์คํ ํ ๋ง๋ค๊ธฐ
์ปค์คํ ํ ์ ๋ง๋ค์ด์ ์ ์ฉํด๋ณด์.
import { useEffect, useState } from 'react';
function useDebounceValue(value, delay) {
const [debouncedValue, setDebouncedValue] = useState(value); // input์์ ์
๋ ฅํ ๊ฐ์ state๋ก ์ ์ํ๋ค.
// ์ผ์ ์๊ฐ์ด ์ง๋ ํ์๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ง ์๋๋ค๋ฉด setDevounceValue ํจ์ ์คํ
// ์ฆ, ์ต์ข
์
๋ ฅ ๊ฐ์ด state์ ๋ค์ด๊ฐ๋ค.
// ๋ฐ๋ ์ต์ข
๊ฐ์ด return ๋๋ค.
// ์ผ์ ์๊ฐ์ด ์ง๋๊ธฐ ์ ์ ๋ input์ ๊ฐ์ ์
๋ ฅํ๋ฉด ๊ธฐ์กด debounceValue๊ฐ return ๋๋ค.
useEffect(() => {
const handler = setTimeout(() => {
setDebouncedValue(value);
}, delay);
return () => {
clearTimeout(handler);
};
}, [value, delay]);
return debouncedValue;
}
export default useDebounceValue;
์ฝ๋ ์์
import React, { useState } from 'react';
import { useQuery } from 'react-query';
import getSearchUser from '../../api/search/getSearchUser';
import SearchTemplate from '../../components/template/SearchTemplate/SearchTemplate';
import useDebounceValue from '../../hooks/useDebounceValue';
const SearchPage = () => {
const [keyword, setKeyword] = useState('');
const debouncedKeyword = useDebounceValue(keyword, 500); // ํค์๋ ๊ฐ, 0.5์ด
const { data, isLoading } = useQuery(
['searchUser', debouncedKeyword],
() => getSearchUser(keyword),
{
enabled: !!debouncedKeyword,
select: (result) =>
result
.filter((user) => user.username.includes(debouncedKeyword))
.slice(0, 10),
},
);
const onChangeSearch = (e) => {
setKeyword(e.target.value);
};
return (
<SearchTemplate
onChangeSearch={onChangeSearch}
searchResultData={data}
keyword={keyword}
isLoading={isLoading}
/>
);
};
export default SearchPage;
๊ฒฐ๊ณผ
abc๋ฅผ ๊ฒ์ํ๋ฉด 0.5์ด ๋ค ๊ฒ์์ด์ ๋ํ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋๋ค.
๊ฐ๋ฐ์ ๋๊ตฌ์ ๋คํธ์ํฌ ํญ์์ api๊ฐ ํ๋ฒ๋ง ๋ถ๋ฌ์์ง ๊ฒ๋ ํ์ธํ ์ ์๋ค.
๊ณ ์น์ง ๋ชปํ ์ฌํญ
๊ฒ์์ด๋ฅผ ์ ๋ ฅํ๋ค๊ฐ ์ง์ฐ๋ฉด ์ ์ด๋ ๊ฒ ๋จ๋์ง ๋ชจ๋ฅด๊ฒ ๋ค ใ ใ
๊ฒ์์ด๋ฅผ ์ง์ด๋ค๋ฉด ์์ ์๋ฌด๊ฒ๋ ์๋จ๊ธธ ๋ฐ๋ผ๋๋ฐ ์๊พธ ์ ๋ ๊ฒ ๋ฌ๋ค ์ด์ ๊ฐ ๋ญ๊น์์์์์ ....
ํ๋ฌ๋ฐ๋ง์ ๋ฆฌํฉํ ๋ง์ ํด์ ์ฝ๋๋ฅผ ์ ๋๋ก ์ดํด ๋ชปํ๊ณ ์๋ ์ถ๊ธฐ๋ ํ๊ณ ,, ^^ใ ใ
+) 2023.02.28 ์์ ์๋ฃ!
๋๋ฌด ๊ฐ๋จํ๊ฒ ํด๊ฒฐ ๊ฐ๋ฅํ ๋ฌธ์ ์๋ค..ใ ใ ใ ใ ใ ํค์๋๊ฐ ์์ ๋์๋ง ์ ์ ์ปดํฌ๋ํธ๊ฐ ๋จ๊ฒ๋ ํ๋ฉด ๋์์...!!!!!!
'Front-end ๐ฅ๐ค > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React Query] useInfiniteQuery์ useInView๋ก ๊ฒ์๋ฌผ ๋ฌดํ์คํฌ๋กค ๊ตฌํํ๊ธฐ (4) | 2023.02.28 |
---|---|
React-Slick์ผ๋ก ์ฌ๋ผ์ด๋๋ฅผ ๋ง๋ค์ด๋ณด์! (0) | 2023.02.26 |
์ฐ๋นํํ ๋ง๋ ์๋๋ ์ ์ ๊ฒ์ ๊ธฐ๋ฅ ๋ฐ์ ์ํค๊ธฐ๐ฑ - 1 (3) | 2023.02.24 |
[React] JSX์ ๊ธฐ๋ณธ ๊ท์น (0) | 2022.06.15 |
[React] ์ ๋ฆฌ์กํธ๊ฐ ๋ง๋ค์ด์ก์๊น? (0) | 2022.06.15 |
- Total
- Today
- Yesterday
- HTML
- DAPP
- ํ์ฅ์ค์ต
- JavaScript
- ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ ์ค๊ธฐ
- indexOf()
- ์ ์ฒ๊ธฐ ์ค๊ธฐ
- php๊ฒ์ํ๋ง๋ค๊ธฐ
- CSS
- ์กธ์ ์ํ
- ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ ์ค๊ธฐ ์ ๋ฆฌ
- ์กธ์ ์ํ์ค๋น
- MySQL
- ๋ธ๋ก์ฒด์ธ
- C์ธ์ด
- ํ๋ก๊ทธ๋๋จธ์ค
- ์ค๋งํธ์ปจํธ๋ํธ
- ํํ์ด์ง ๋ง๋ค๊ธฐ
- ๋ ธ๋ง๋์ฝ๋
- ๊ฐค๋ฌ๋ฆฌ๋์ฐ๊ธฐ
- php
- ๋ฆฌ์กํธ
- css grid
- ์ ์ฒ๊ธฐ ์ค๊ธฐ ์ ๋ฆฌ
- ํ์ฅ์ค์ต ๊ธฐ๋ก
- set ๊ฐ์ฒด
- ๋ฐฑ์ค
- ์ด๋๋ฆฌ์
- php ๋ฌ๋ ฅ๋ง๋ค๊ธฐ ์์ฉ
- ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |