๐ŸŽ€ Wedding-card #5. Main Page - ์ข‹์•„์š”๊ธฐ๋Šฅ

Graceยท2021๋…„ 7์›” 19์ผ
0

wedding-card

๋ชฉ๋ก ๋ณด๊ธฐ
5/7
post-thumbnail

๐Ÿ“Œ ์ข‹์•„์š” ๊ธฐ๋Šฅ

Swiperํ•˜๋‹จ์— ๋นˆํ•˜ํŠธ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋นจ๊ฐ„ํ•˜ํŠธ๋กœ ๋ฐ”๋€Œ๋ฉด์„œ ์ˆซ์ž๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋„๋ก ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๊ธฐ๋Šฅ..
์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ์•„์ง๋„ ๊ฐ„๋‹จํ•œ ๊ธฐ๋Šฅ๋„ ์–ด๋ ต๊ฒŒ ๊ตฌํ˜„ํ•ด๋‚ด๋Š” ๊ฐœ๋ฐœ๋ณ‘์•„๋ฆฌ...

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

๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜๋ฉด,
๋ธŒ๋ผ์šฐ์ € ์ €์žฅ์†Œ์ค‘์˜ ์›น์Šคํ† ๋ฆฌ์ง€ ์ค‘์— ํ•˜๋‚˜์ธ localStorage๋Š”
ํ”ํžˆ ๋กœ๊ทธ์ธ ์œ ์ง€ ๊ธฐ๋Šฅ์ฒ˜๋Ÿผ, ๋ช…์‹œ์ ์œผ๋กœ ์‚ญ์ œํ•ด์ฃผ์ง€ ์•Š๋Š” ์ด์ƒ
์ง€์›Œ์ง€์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์„ ๋งํ•œ๋‹ค.
๋” ์ž์„ธํ•œ๊ฑด ๋”ฐ๋กœ ํฌ์ŠคํŒ…ํ•ด๋ณด๊ธฐ๋กœ..!

1. ๊ธฐ๋Šฅ์ž‘์—… ๊ณผ์ •

  • Mainpage์—์„œ props๋กœ Like์ปดํฌ๋„ŒํŠธ์— ์„œ๋ฒ„์— ์žˆ๋Š” likes๊ฐ’์„ ๋„˜๊ฒจ์ค˜์„œ ๊ฐฏ์ˆ˜๋ฅผ ํ‘œ์‹œ
  • Like์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒํƒœ๊ฐ’์„ like๋กœ ์„ค์ •ํ•˜๊ณ , localStorage์—๋Š” flag ๊ฐ’์„ ์„ค์ •
const flag = localStorage.getItem("like_flag");
  • ํ•˜ํŠธ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ฒŒ ๋˜๋ฉด onClickํ•จ์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด์„œ, ์„œ๋ฒ„ ์ƒํƒœ๊ฐ’์ด 200์ด ๋˜๋ฉด ์„œ๋ฒ„์— ๊ฐฏ์ˆ˜๊ฐ€ ์ถ”๊ฐ€๊ฐ€ ๋˜๊ณ , ํ•˜ํŠธ๊ฐ€ ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ์ฑ„์›Œ์ง€๊ฒŒ ๋œ๋‹ค.
 const handleClick = (): void => {
    if (like) return;
    setLike(true);
    dispatch(addLike());
    fetch("์„œ๋ฒ„์ฃผ์†Œ/addLike", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        postId: "",
      }),
    })
      .then((response) => response.json())
      .then((json) => {
        console.log(json);
        if (json.status === 200) {
          dispatch(addLike());
        }
      });
  };

โญ๏ธ ์—ฌ๊ธฐ์„œ ๋ง‰๊ฐ„์œผ๋กœ dispatch์— ๋Œ€ํ•ด !
redux๋ฅผ ์–ธ์ œ ์ •๋ฆฌํ•ด์•ผํ• ์ง€ ๋ชฐ๋ผ์„œ ์•„์ง ์ •๋ฆฌ๋ฅผ ๋ชปํ–ˆ๋Š”๋ฐ,,
์œ„ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉ๋œ dispatch๋Š”
๋ฏธ๋ฆฌ onClickํ•จ์ˆ˜ ๋ฐ–์—์„œ useDispatch()๋กœ ๋งŒ๋“ค์–ด์ง€๊ณ ,
modules์˜ reducer๋กœ ์ž‘์„ฑํ•œ ์ผ€์ด์Šค์—์„œ addLikeํ•จ์ˆ˜๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ์„œ
์ˆซ์ž๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค.

2. ๋ฆฌํŒฉํ† ๋ง

์ด ์ž‘์—…์„ ํ•˜๋ฉด์„œ ์‚ฌ์šฉ์ž๊ฒฝํ—˜์— ๋Œ€ํ•ด์„œ ๋” ๋ฐฐ์šฐ๊ฒŒ ๋œ ๊ฒƒ ๊ฐ™๋‹ค.
ํ•˜ํŠธ๋ฅผ ๋ˆ„๋ฅด๋Š” ์•ก์…˜์„ ์ทจํ•œ ํ›„์—๋„,
๊ทธ ๊ฐ’์ด ์„œ๋ฒ„์— ์ •์ƒ์ ์œผ๋กœ ์˜ฌ๋ผ๊ฐ„ ํ›„์—์•ผ ์ ์šฉ์ด ๋˜์–ด์„œ view๊ฐ€ ๋ณ€ํ•˜๋‹ค ๋ณด๋‹ˆ
๊ทธ ํ‹ˆ์ƒˆ์— ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์ƒ๊ธฐ๊ฒŒ ๋˜์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์„œ๋ฒ„์— ์˜ฌ๋ผ๊ฐ€๊ธฐ ์ด์ „์— ์ผ๋‹จ view๋ฅผ ๋ฐ”๊ฟ”์ค€ ํ›„
์„œ๋ฒ„์— ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์ฝ”๋“œ๋กœ ๋ฐ”๊พธ๊ธฐ๋กœ ํ–ˆ๋‹ค.

const handleClick = (): void => {
    if (like && flag) return;
    dispatch(addLike());
    setLike(true);
    fetch("์„œ๋ฒ„์ฃผ์†Œ/addLike", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        postId: "",
      }),
    });
  };

์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด,
ํ•˜ํŠธ๋ฅผ ํด๋ฆญํ•˜๋ฉด ์šฐ์„  ํ•˜ํŠธ์ด๋ฏธ์ง€ ๋ณ€๋™, ์ˆซ์ž ๋”ํ•ด์ง€๋Š” view๊ฐ€ ๋ฐ”๋€Œ๊ณ 
๋ณด์ด์ง€ ์•Š๋Š” ์„œ๋ฒ„์—์„œ๋Š” ์ด์ „ ์ข‹์•„์š” ์ˆซ์ž์— +1์ด ๋˜๋Š” ์ค‘..์ธ ๋ชจ์–‘์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค(?)


๋‹ค์Œ์— ์‹œ๊ฐ„์ด ๋‚˜๋ฉด ์ธ์Šคํƒ€๊ทธ๋žจ์ฒ˜๋Ÿผ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์‚ฌ์ง„์— ํ•˜ํŠธ๊ฐ€ ํ‘œ์‹œ๋˜์—ˆ๋‹ค๊ฐ€
์‚ฌ๋ผ์ง€๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜๋„ ๋„ฃ์–ด๋ณด๊ณ ์‹ถ๋‹ค :)

๋•๋ถ„์— ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :)

profile
์‰ฝ๊ฒŒ ์‚ฌ๋Š”๊ฑด ์žฌ๋ฏธ๊ฐ€ ์—†๋”๊ตฐ์š”, ์ƒˆ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค๐Ÿค“

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