1 ๋ถ„ ์†Œ์š”

useState?๐Ÿ“

useState : useStateํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ณ€์ˆ˜์™€ ๊ทธ ๋ณ€์ˆ˜๋ฅผ setํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ return ํ•œ๋‹ค
useState๋ฅผ ํ†ตํ•ด ๋งŒ๋“  ๋ณ€์ˆ˜๋Š” ๊ฐ’์ด ๋ณ€๊ฒฝ์ด ๋˜๋ฉด ๋žœ๋”๋ง๋˜๋ฉฐ ์ƒˆ๋กญ๊ฒŒ ์จ์ง„๋‹ค.


์ด๋•Œ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜๊ฐ€ setterํ•จ์ˆ˜์ด๋‹ค.


์‚ฌ์šฉ๋ฐฉ๋ฒ•๐Ÿ“

ex) ์ž˜๋ชป๋œ ์‚ฌ์šฉ๋ฒ•

let [like, setlike] = useState("๐Ÿค");

{
  <div
    onClick={() => {
      like = "ํ•˜ํŠธ";
    }}
  >
    {like}
  </div>;
}

์ด๊ฒƒ์€ ์ž˜๋ชป๋œ ์˜ˆ์‹œ์ด๋‹ค. ์‹ค์ œ๋กœ ๐Ÿค๋ฅผ ํด๋ฆญํ•œ๋‹ค๊ณ  ํ•ด๋„ like๋ณ€์ˆ˜๋Š” โ€˜ํ•˜ํŠธโ€™๋กœ ๋ณ€ํ•˜์ง€์•Š๋Š”๋‹ค. ์˜ค์ง setlikeํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋‹ค.

ex) ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ๋ฒ•

let [like, setlike] = useState("๐Ÿค");

{
  <div
    onClick={() => {
      setlike("ํ•˜ํŠธ");
    }}
  >
    {like}
  </div>;
}

์˜ฌ๋ฐ”๋ฅธ ์˜ˆ์‹œ. ๐Ÿค๋ฅผ ๋ˆ„๋ฅด๋ฉด โ€˜ํ•˜ํŠธโ€™ ๋ผ๋Š” ํ…์ŠคํŠธ๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.



์ฐธ์กฐํƒ€์ž…์ผ๋•Œ๐Ÿ“

ex) ์ฐธ์กฐํƒ€์ž…(๋ฐฐ์—ด)์˜ ์ž˜๋ชป๋œ ์‚ฌ์šฉ๋ฒ•

let [like, setlike] = useState(["์•ˆ๋…•", " ๋ญํ•ด"]);

{
  <div
    onClick={() => {
      setlike((like[2] = "์ž˜๊ฐ€"));
    }}
  >
    {like}
  </div>;
}

๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋ฐฐ์—ด์˜ 2๋ฒˆ ์ธ๋ฑ์Šค์— ๊ฐ’์„ ๋„ฃ์–ด์ค˜ ๋ผ๊ณ  ๋ช…๋ นํ•œ๊ฒƒ๊ฐ™์€๋ฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด โ€˜์ž˜๊ฐ€โ€™๋ผ๊ณ  ๋ฐ”๋€๋‹ค. ์ดˆ๊ธฐ๊ฐ’๋“ค์ด ์—†์–ด์ง„๊ฒƒ์ด๋‹ค.

ex) ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ๋ฒ•

let [like, setlike] = useState(["์•ˆ๋…•", " ๋ญํ•ด"]);

{
  <div
    onClick={() => {
      let copy = [...like];
      copy.push(" ์ž˜๊ฐ€");
      setlike(copy);
    }}
  >
    {like}
  </div>;
}

์ „๊ฐœ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ๋ฐฐ์—ด์„ deepCopyํ•ด์ฃผ์—ˆ๊ณ  copy์— ๊ฐ’์„ ๋„ฃ์–ด ๊ทธ๊ฒƒ์„ setํ•ด์ฃผ์—ˆ๋‹ค. // ์•ˆ๋…• ๋ญํ•ด ์ž˜๊ฐ€



ex) ์ฐธ์กฐํƒ€์ž…(๋ฐฐ์—ด์˜ ์š”์†Œ์— ์ฐธ์กฐํƒ€์ž…์ด ์žˆ์„๊ฒฝ์šฐ)์˜ ์ž˜๋ชป๋œ ์‚ฌ์šฉ๋ฒ•

let [like, setlike] = useState([{"์•ˆ๋…•",1}, {" ๋ญํ•ด",2}]);

{
  <div
    onClick={() => {
      let copy = [...like];
      copy,push({"goodbye"});
      setlike(copy);
    }}
  >
  </div>;
}

๋ฐฐ์—ด์˜ ์š”์†Œ๋กœ ์ฐธ์กฐํƒ€์ž…์ด ์žˆ์„๊ฒฝ์šฐ ์ „๊ฐœ์—ฐ์‚ฐ์ž๋กœ copyํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์˜ฌ์ง€์•Š๋‹ค. ๋ฐฐ์—ด์˜ ๋ฐ”๊นฅ๋ถ€๋ถ„๋งŒ copy๋˜์–ด ์–•์€๋ณต์‚ฌ๊ฐ€ ๋œ๋‹ค.

ex) ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ๋ฒ•

let [like, setlike] = useState([{"์•ˆ๋…•",1}, {" ๋ญํ•ด",2}]);

{
  <div
    onClick={() => {
      let deepcopy = JSON.parse(JSON.stringify(like));
      deepcopy.push(" ์ž˜๊ฐ€");
      setlike(copy);
    }}
  >
  </div>;
}

๋ฐฐ์—ด์„ string์œผ๋กœ ๋ฐ”๊พธ๊ณ  ๊ทธ๊ฐ’์„ ๋‹ค์‹œ Object๋กœ ๋ฐ”๊พธ๋Š” ๊ณผ์ •์—์„œ ๋ชจ๋“  ๊ฐ’๋“ค์ด ๊ธฐ์กด ๋ ˆํผ๋Ÿฐ์Šค์™€ ๋Š๊ฒจ ์ƒˆ๋กœ์šด ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ์— ์™„๋ฒฝํ•œ deepcopy๋ผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.



๐Ÿ“— ์–•์€ ๋ณต์‚ฌ: ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๊ณต์œ ํ•จ
๐Ÿ“— ๊นŠ์€ ๋ณต์‚ฌ: ์•„์˜ˆ ์ƒˆ๋กœ์šด ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๊ฐ€์ง

๊นŠ์€ ๋ณต์‚ฌ 1 : JSON.parse(JSON.stringify()) ์‚ฌ์šฉ // ๋‹จ์  - ํ•จ์ˆ˜๊ฐ€๋“ค์–ด๊ฐ„ Object๋Š” ์‚ฌ์šฉx

๊นŠ์€ ๋ณต์‚ฌ 2 : lodash(_) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ

const original = { a: { b: 2 } };
let copy = _.cloneDeep(original);
copy.a.b = 100;
console.log(original.a.b); //2

๊นŠ์€ ๋ณต์‚ฌ 3 : ์ปค์Šคํ…€ ์žฌ๊ท€ํ•จ์ˆ˜

function cloneObject(obj) {
  var clone = {};
  for (var key in obj) {
    if (typeof obj[key] == "object" && obj[key] != null) {
      clone[key] = cloneObject(obj[key]);
    } else {
      clone[key] = obj[key];
    }
  }

  return clone;
}


๋จธ๋ฆฌ์•„ํ”„์ง€์•Š๊ฒŒ lodash๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์• ์šฉํ•˜์ž.

์—…๋ฐ์ดํŠธ: