[React] ๐Ÿ”„๏ธ๋ฌดํ•œ ๋ Œ๋”๋ง ์›์ธ ์ฐพ๊ธฐ

์ด๋‹ค์˜ยท2024๋…„ 7์›” 16์ผ

React

๋ชฉ๋ก ๋ณด๊ธฐ
18/31

๋‹ค์ด๋‹ ์ฝ”๋“œ ๋ฏธ๋‹ˆํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋Šฅ์€ ์ข‹์•„์š” ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ์ข‹์•„์š” ๋ชฉ๋ก ํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐ€ ๋ณด๋ฉด ํด๋ฆญํ–ˆ๋˜ ์žฅ์†Œ๋ฅผ ๋ชจ๋‘ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ setState๋กœ ๋ณ€๊ฒฝํ–ˆ์„ ๋•Œ๋งŒ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด์„œ ๊ธฐ๋ก์„ ํ•˜์ž๋ฉด ..

์ „์ฒด์ฝ”๋“œ

//App.js

  const place = data;
  const [addPlace, setAddPlace] = useState([]);

App.js ํŒŒ์ผ์—์„œ data์ €์žฅ๋˜์–ด ์žˆ๋Š” ์นดํŽ˜ ๋ชฉ๋ก๋“ค์„ place ๋ณ€์ˆ˜์— ๋‹ด์•„์ฃผ์—ˆ๊ณ , ๋‚ด๊ฐ€ ์ข‹์•„์š”ํ•œ ๋ชฉ๋ก๋“ค์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๊ฒŒ addPlace์˜ ์ดˆ๊ธฐ๊ฐ’์„ ๋นˆ๋ฐฐ์—ด๋กœ ์ฃผ์—ˆ๋‹ค. ๋ฌผ๋ก  App.jsx ํŒŒ์ผ์—์„œ ๋งŒ๋“  state์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•œ ๊ณณ์—๋Š” props๋ฅผ ๊ตฌ์กฐ๋ถ„ํ•ด๋ฌธ๋ฒ•์œผ๋กœ ๋‚ด๋ ค์ฃผ์—ˆ๋‹ค.

//LikePage.jsx

const LikePage = ({ addPlace, navigate }) => {
  return (
    <Container>
      <Title>
        <img
          src={mainlogo}
          alt="๋ฉ”์ธ๋กœ๊ณ "
          width="20%"
          height="100%"
          onClick={() => navigate("/")}
        />
      </Title>
      <LikePlace>
        {addPlace.map((item, i) => (
          <PlaceItem key={i}>
            <img src={getCafeImage(item.id)} width="220px" alt={item.title} />
            <h4>{item.title}</h4>
          </PlaceItem>
        ))}
      </LikePlace>
    </Container>
  );
};

export default LikePage;

getCafeImage๋ถ€ํ„ฐ ์„ค๋ช…ํ•˜์ž๋ฉด ์ด๋ฏธ์ง€๋ฅผ ๋”ฐ๋กœ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ๋งŒ๋“  ํ•จ์ˆ˜์ด๋‹ค. ์ธ์ˆ˜์— item.id๋ฅผ ๋„ฃ์–ด์ค€ ์ด์œ ๋Š” ํ•จ์ˆ˜๋ฅผ switch๋ฌธ์œผ๋กœ ์ž‘์„ฑํ–ˆ๋Š”๋ฐ cafeId์˜ case๊ฐ€ 1๋ฒˆ์ผ๋•Œ 1๋ฒˆ์— ๋งž๋Š” ์นดํŽ˜์ด๋ฏธ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ์„ธ์š” ! ์ด๋Ÿฐ์‹์œผ๋กœ ์ž‘์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ์ง€๊ฐ€ id์— ๋”ฐ๋ผ์„œ ํ™”๋ฉด์— ์ž˜ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

//Place.jsx

const Place = ({ place, addPlace, setAddPlace }) => {
  const onClickAddPlace = (action) => {
    const addItem = place.filter((placeItem) => placeItem.id === action.id);
    if (addItem) {
      setAddPlace([...addPlace, ...addItem]);
    }
  };
  return (
    //๋‹ค๋ฅธ ๋ถ€๋ถ„์˜ ์ฝ”๋“œ ์ƒ๋žต๋จ
    <LikeBtn
      onClick={() =>
        onClickAddPlace({
          id: item.id,
          title: item.title,
        })
      }
    >
      ์ข‹์•„์š”
    </LikeBtn>
  );
};

โš ๏ธ ๋ฌดํ•œ๋ Œ๋”๋ง ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

์œ„์— ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋Š” ์ˆ˜์ •๋œ ๋ถ€๋ถ„์˜ ์ฝ”๋“œ์ด๋‹ค. ์•„๋ž˜ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์™œ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋Š” ์ง€ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

<์˜ค๋ฅ˜ ๋ถ€๋ถ„>

// ์ž˜๋ชป๋œ ์˜ˆ์‹œ
onClick={
  onClickAddPlace({
    id: item.id,
    title: item.title,
})

// ์ •์ƒ์ž‘๋™ ์˜ˆ์‹œ
onClick={ () => 
  onClickAddPlace({
    id: item.id,
    title: item.title,
})  
  • onClick์•ˆ์— ์ž‘์„ฑํ–ˆ์„ ๋•Œ ์‹ค์ˆ˜ํ–ˆ๋˜ ๋ถ€๋ถ„์ด () => ์ด ์ฝ”๋“œ๋ฅผ ์ ์ง€ ์•Š์•„์„œ ์˜€๋‹ค. ์ด ์ฝ”๋“œ๋ฅผ onClick์•ˆ์— ์ ๊ฒŒ๋˜๋ฉด ํด๋ฆญํ–ˆ์„ ๋•Œ๋งŒ ๋‚ด๊ฐ€ ์ธ์ˆ˜์•ˆ์— ์ ์—ˆ๋˜ ๋ถ€๋ถ„๋“ค์ด ํ•จ์ˆ˜ ์กฐ๊ฑด์— ๋งž๊ฒŒ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ํ•จ์ˆ˜์— ์ธ์ˆ˜๋ฅผ ๋„ฃ์–ด์•ผ ๋˜๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด () => ๊ผญ ์ ์–ด์ฃผ๊ณ  ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ํ•จ์ˆ˜๋ช…๋งŒ ์ ์–ด์ค˜์•ผ ํ•œ๋‹ค !!!!!!

  • () => ์ ์ง€ ์•Š์•˜์„ ๋•Œ, ํ•œ ๋งˆ๋””๋กœ ์„ค๋ช…ํ•˜์ž๋ฉด onClickAddPlace() ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋กœ ๊ทธ ์ž๋ฆฌ์—์„œ ์‹คํ–‰์ด ๋œ๋‹ค. ๋‚ด๊ฐ€ ํด๋ฆญ์„ ํ–ˆ๋Š” ์ง€ ์•ˆ ํ–ˆ๋Š” ์ง€๋Š” ์ƒ๊ด€์—†์ด ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ , setAddPlace์˜ ๊ฐ’์ด ๊ณ„์† ๋ฐ”๋€Œ๋ฉด์„œ ๋ฆฌ๋ Œ๋”๋ง ๋๊ธฐ ๋•Œ๋ฌธ์— ๋ฌดํ•œ ๋ Œ๋”๋ง์ด ๋์—ˆ๋˜ ๊ฒƒ์ด๋‹ค.

โญ ์š”์•ฝ

ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ๋ฒ• ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ์—ˆ๋˜ ๊ฒƒ์ด์—ˆ๋‹ค ...
onClick ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์—๋Š” ์•„๋ž˜ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ์ •์ƒ ๋ Œ๋”๋ง์ด ๋œ๋‹ค. ์ด ๋‘ ์ฝ”๋“œ๋Š” ๋˜‘๊ฐ™์ด ์ž‘๋™๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒํ™ฉ์— ๋งž๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

//onClick ๋ฌธ๋ฒ•

onClick={() => ํ•จ์ˆ˜๋ช…()}
onClick={ํ•จ์ˆ˜๋ช…}

๋‹ค์ด๋‹์ฝ”๋“œ ์ •์ƒ์ž‘๋™

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