์‹œ์ž‘ํ•˜๊ธฐ

์‹œ์ž‘ํ•˜๊ธฐ

์„ค์น˜

# pnpm (๊ถŒ์žฅ)
pnpm add @frontend-toolkit-js/hooks @frontend-toolkit-js/components
 
# npm
npm install @frontend-toolkit-js/hooks @frontend-toolkit-js/components
 
# yarn
yarn add @frontend-toolkit-js/hooks @frontend-toolkit-js/components

ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋งŒ ๊ฐœ๋ณ„ ์„ค์น˜๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

Hooks

import { useDebounce } from '@frontend-toolkit-js/hooks';
 
function SearchInput() {
  const [value, setValue] = useState('');
  const debouncedValue = useDebounce(value, 300);
 
  useEffect(() => {
    if (debouncedValue) {
      fetchResults(debouncedValue);
    }
  }, [debouncedValue]);
 
  return <input value={value} onChange={e => setValue(e.target.value)} />;
}

Components

import { InViewTrigger } from '@frontend-toolkit-js/components';
 
function LazySection() {
  return (
    <InViewTrigger onInView={() => console.log('ํ™”๋ฉด์— ๋ณด์ž„!')}>
      <div>๋‚ด์šฉ</div>
    </InViewTrigger>
  );
}

TypeScript

๋ชจ๋“  ํŒจํ‚ค์ง€๋Š” TypeScript๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ ํƒ€์ž…์ด ์ž๋™ ์ถ”๋ก ๋ฉ๋‹ˆ๋‹ค.

const debouncedValue = useDebounce(searchTerm, 300);
//    ^? string - ํƒ€์ž… ๋ช…์‹œ ๋ถˆํ•„์š”!

๋‹ค์Œ ๋‹จ๊ณ„

  • Hooks - useDebounce, useCalendar ๋“ฑ
  • Components - InViewTrigger, SuspenseBoundary ๋“ฑ