[๐Ÿ•น๏ธ ํฌ์ผ“๋ชฌ ๋„๊ฐ] ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌํ•˜๊ธฐ

JiEunยท2024๋…„ 1์›” 30์ผ
0

์‹œ์ž‘

์ตœ๊ทผ ํฌ์ผ“๋ชฌ API๋ฅผ ํ™œ์šฉํ•ด ๊ณต๋ถ€ํ• ๊ฒธ ํฌ์ผ“๋ชฌ ๋„๊ฐ์„ ์ž‘์—…ํ•˜๊ณ  ์žˆ๋‹ค.
ํฌ์ผ“๋ชฌ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐฉ๋Œ€ํ•˜๊ธฐ๋„ ํ•ด์„œ ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ์‹ ๊ฒฝ์“ฐ๊ฒŒ ๋˜์—ˆ๋‹ค.


์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌํ•˜๊ธฐ

์ดˆ๋ฐ˜์—๋Š” ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๋ฌถ์—ฌ ์žˆ๋‹ค.
๊ทธ๋Ÿฌ๋‹ค ๋ณด๋‹ˆ ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ ๋  ๋•Œ ๋งˆ๋‹ค ๋ฆฌ๋ Œ๋”๋งํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ state๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๋ฆฌ๋ Œ๋”๋ง ๋œ๋‹ค.

  • state, props์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ ๋  ๋•Œ
  • ์ƒˆ๋กœ์šด ์ƒํƒœ ๊ฐ’์ด ์ถ”๊ฐ€ ๋  ๋•Œ

์ฆ‰, ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ฐ™์ด ์žˆ๋‹ค๋ฉด ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๊ฒ€์ƒ‰ ์ปดํฌ๋„ŒํŠธ์— ๋‹๋ณด๊ธฐ ์•„์ด์ฝ˜, ๊ฒ€์ƒ‰์ฐฝ, ํ•„ํ„ฐ ๋ฒ„ํŠผ์ด ๊ฐ™์ด ์กด์žฌํ•œ๋‹ค.

const SearchBox = () => {
  return (
    <SearchContainer>
      <SearchWrap>
        <IcSearch>
          <Search width="35" height="35" />
        </IcSearch>
        <label htmlFor="search">
          <SearchInput
            type="text"
            name="search"
            placeholder="ํ‚ค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."
          />
        </label>
      </SearchWrap>
      <FilterWrap>
        <FilterBtn />
      </FilterWrap>
    </SearchContainer>
  );
};

๊ฒ€์ƒ‰์ฐฝ์— onChange ์ด๋ฒคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด ๊ฐ’์„ ์ €์žฅํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

์ปดํฌ๋„ŒํŠธ ๋ถ„ํ•  ์ „

onChange ์ด๋ฒคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  input์˜ ๊ฐ’์„ keyWoerd๋ผ๋Š” ์ƒํƒœ์— ์ €์žฅํ–ˆ๋‹ค.

const SearchBox = () => {
  const [keyWord, setKeyWord] = useState('');

  const onChangeKeyWord = (e) => {
    setKeyWord(e.target.value);
  };

  return (
    <SearchContainer>
      <SearchWrap>
        <IcSearch>
          <Search width="35" height="35" />
        </IcSearch>
        <label htmlFor="search">
          <SearchInput
            type="text"
            name="search"
            value={keyWord}
            onChange={onChangeKeyWord}
            placeholder="ํ‚ค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."
          />
        </label>
      </SearchWrap>
      <FilterWrap>
        <FilterBtn />
      </FilterWrap>
    </SearchContainer>
  );
};

ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ์— ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฌถ์ธ ์ƒํƒœ์—์„œ ๊ฒ€์ƒ‰์ฐฝ์„ ์‚ฌ์šฉํ•ด ๋ดค๋‹ค.

์ด๋ฏธ์ง€๋ฅผ ๋ณด๋ฉด ๊ฒ€์ƒ‰์ฐฝ์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ ๋  ๋•Œ ๋งˆ๋‹ค
์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋‹๋ณด๊ธฐ ์•„์ด์ฝ˜, ํ•„ํ„ฐ ๋ฒ„ํŠผ๋„ ๊ฐ™์ด ๋ฆฌ๋ Œ๋”๋ง ๋˜๋Š”๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋กœ ์ปดํฌ๋„ŒํŠธ ๋ถ„ํ• ์ด ์ค‘์š”ํ•˜๋‹ค ์ƒ๊ฐํ•œ๋‹ค.

์ปดํฌ๋„ŒํŠธ ๋ถ„ํ• ํ•˜๊ธฐ

const SearchBox = () => {
  return (
    <SearchContainer>
      <SearchWrap>
        <IcSearch>
          <Search width="35" height="35" />
        </IcSearch>
        <SearchInput />
      </SearchWrap>
      <FilterWrap>
        <FilterBtn />
      </FilterWrap>
    </SearchContainer>
  );
};

SearchInput์œผ๋กœ ๊ฒ€์ƒ‰์ฐฝ์„ ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ๋งŒ๋“ค๊ณ  importํ•ด ๋ถˆ๋Ÿฌ ์™”๋‹ค. ๊ทธ๋Ÿฌ๊ณ  ๋‹ค์‹œ ๊ฒ€์ƒ‰์ฐฝ์— ์ž…๋ ฅํ•  ๊ฒฝ์šฐ

์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒ€์ƒ‰์ฐฝ์—๋งŒ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค.


๋งˆ์น˜๋ฉฐ

๊ธ‰ํ•  ๋• ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ์— ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ๋„ฃ์–ด ์ž‘์—…ํ•˜๊ณ 
๋‹ค์Œ์— ๋ฆฌํŒฉํ† ๋งํ•ด์•ผ์ง€ ํ•˜๋Š”์‹์œผ๋กœ ์ง„ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•˜๋‹ค.

๊ฐœ๋ฐœ์ž ๋ชจ๋“œ๋กœ ๋ Œ๋”๋ง ์ƒํ™ฉ์„ ํ™•์ธํ•˜๋‹ˆ
์ž‘์—…์„ ํ•˜๋ฉด์„œ ์ปดํฌ๋„ŒํŠธ ๋ถ„ํ• ํ•˜๋Š”๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ๋‹ค.

์ด๋ฒˆ ์‹œ๊ฐ„์„ ํ†ตํ•ด ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์„ ๋ง์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

profile
๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ชฉํ‘œ๋กœ ์„ฑ์žฅ ์ค‘! (์•Œ์•„๋ดค๋˜ ๋‚ด์šฉ ๋“ฑ์„ ์ •๋ฆฌํ•˜๊ธฐ)

0๊ฐœ์˜ ๋Œ“๊ธ€