โœ๐Ÿป [Code Camp_TIL] 8์ผ์ฐจ: Component ์žฌ์‚ฌ์šฉ

code_Jยท2023๋…„ 3์›” 26์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
12/41
post-thumbnail

๊ณตํ†ต component ๋งŒ๋“ค์–ด์„œ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ


๋งŒ๋“ค๊ณ  ์žˆ๋Š” ๊ฒŒ์‹œํŒ์—์„œ ๋“ฑ๋ก ํŽ˜์ด์ง€์™€ ์ˆ˜์ • ํŽ˜์ด์ง€๋Š” ๋™์ผํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€๋Š” ๋‘ ํŽ˜์ด์ง€๋ฅผ ๊ฐ๊ฐ ๋”ฐ๋กœ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ, ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์—ˆ๋‹ค. ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ƒ๊ธฐ๋ฉด ์ผ์ผ์ด ๋‹ค ์ˆ˜์ •์„ ํ•ด์ค˜์•ผ ํ•˜๋Š” ์ ์ด ๋น„ํšจ์œจ์ ์ด์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ด๋ฒˆ์—๋Š” ๊ณตํ†ต component๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ฐ๊ฐ์˜ ํŽ˜์ด์ง€์— import๋งŒ ํ•ด์ฃผ์—ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์—ฌ๋Ÿฌ ๋ฒˆ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค ํ•„์š”๋„ ์—†๊ณ  ์ˆ˜์ •๋„ component์—์„œ ํ•œ ๋ฒˆ๋งŒ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.


// ๋“ฑ๋ก ํŽ˜์ด์ง€
import BoardComponent from "../../../src/components/units/board/board-component";

export default function BoardComponentNewPage() {
  return <BoardComponent />;
}

// ์ˆ˜์ •ํŽ˜์ด์ง€
import BoardComponent from "../../../src/components/units/board/board-component";

export default function BoardComponentEditPage() {
  return <BoardComponent />;
}

๊ณตํ†ต๋œ component ์™ธ์— ๋‘ ํŽ˜์ด์ง€์—์„œ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•ด์ค˜์•ผ ํ•˜๋Š” ๋ถ€๋ถ„๋“ค์ด ์žˆ๋‹ค๋ฉด props์™€ ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋ฅผ ํ™œ์šฉํ–ˆ๋‹ค.

๋“ฑ๋กํŽ˜์ด์ง€์™€ ์ˆ˜์ •ํŽ˜์ด์ง€๋Š” ํŽ˜์ด์ง€์˜ ํฐ ์ œ๋ชฉ์ด '๋“ฑ๋กํŽ˜์ด์ง€'์™€ '์ˆ˜์ •ํŽ˜์ด์ง€'๋กœ ๋‹ค๋ฅด๊ณ , ๋ฒ„ํŠผ์ด ๊ฐ๊ฐ '๋“ฑ๋กํ•˜๊ธฐ'์™€ '์ˆ˜์ •ํ•˜๊ธฐ'๋กœ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋จผ์ €, ๊ฐ ํŽ˜์ด์ง€์— isEdit์˜ boolean ๊ฐ’์œผ๋กœ ๊ฐ๊ฐ 'false'์™€ 'true'๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ , ์ด๋ฅผ ์ปดํฌ๋„ŒํŠธ๋กœ ๋„˜๊ฒจ์ฃผ์—ˆ๋‹ค.


// ๋“ฑ๋กํŽ˜์ด์ง€
return <BoardComponent isEdit={false} />;

// ์ˆ˜์ •ํŽ˜์ด์ง€
return <BoardComponent isEdit={true} />;

๊ทธ ๋‹ค์Œ component์—์„œ isEdit์˜ boolean ๊ฐ’์— ๋”ฐ๋ผ '๋“ฑ๋ก' ํ˜น์€ '์ˆ˜์ •'์ด ๋‚˜์˜ค๋„๋ก ํ•ด์ฃผ๋ฉด ๋œ๋‹ค!

// src/components/units/board/board-component/index.js

export default function BoardComponent(props) {
  return (
    <div>
      <h1>{props.isEdit ? "์ˆ˜์ •" : "๋“ฑ๋ก"}ํŽ˜์ด์ง€</h1>
      ์ œ๋ชฉ: <input type="text" />
      ๋‚ด์šฉ: <input type="text" />
      <button>{props.isEdit ? "์ˆ˜์ •" : "๋“ฑ๋ก"}ํ•˜๊ธฐ</button>
    </div>
  );
}

์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์œ ์‚ฌํ•œ UI์™€ ๊ธฐ๋Šฅ์„ ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ์œ ์ง€๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ๋„ ํŽธ๋ฆฌํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์ด์—ˆ๋‹ค. ์•„์ง์€ props์™€ ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋ฅผ ํ™œ์šฉํ•ด์„œ ๊ณตํ†ต component๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ์ฐจ์ด๋ฅผ ์ œ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜๋Š” ์—ฐ์Šต์ด ๋” ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™๋‹ค. ์•ž์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ๊ณ„์† ๊ณตํ†ต component๋ฅผ ๋งŒ๋“ค๊ณ  importํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์ ์šฉํ•ด๋ณด๋ฉฐ ์ต์ˆ™ํ•ด์ ธ์•ผ๊ฒ ๋‹ค!



profile
Web FE ๊ฐœ๋ฐœ์ž ์ทจ์ค€์ƒ

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