Frontend/React

React | ๊ฐ์ฒด ํƒ€์ž… State ์—…๋ฐ์ดํŠธ

์ด์ œํฌ 2023. 11. 27. 13:00


์ „๊ฐœ ์—ฐ์‚ฐ์ž(`...`) ์‚ฌ์šฉ

  • ์ด์ „ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์˜ค๋ฉด์„œ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ฎ์–ด์“ฐ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•œ๋‹ค. (๋ถˆ๋ณ€์„ฑ ์œ ์ง€)
const [myObject, setMyObject] = useState({ name: 'John', age: 25 });

const updateObject = (newData) => {
  setMyObject((prevObject) => ({
    ...prevObject,
    ...newData,
  }));
};

console.log(updateObject({ age: 26 })); // { name: 'John', age: 26 }

Object.assign()

Object.assign(target, source1, source2, ...);
  • ์›๋ณธ ๊ฐ์ฒด์—์„œ ์†์„ฑ์„ ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ๋ณต์‚ฌํ•˜๋Š” ๋ฉ”์„œ๋“œ ์ด๋‹ค.
  • target์€ ๋ชฉํ‘œ ๊ฐ์ฒด๋กœ ์—ฌ๊ธฐ์— ์†์„ฑ์ด ๋ณต์‚ฌ๋œ๋‹ค.
  • source1, source2 ๋Š” ๋ณต์‚ฌ๋  ์†Œ์Šค ๊ฐ์ฒด๋“ค์ด๋‹ค.
  • ๋งŒ์•ฝ์— ์†์„ฑ์ด ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๋ฉด, ๊ทธ ์†์„ฑ์€ ์†Œ์Šค ๊ฐ์ฒด์˜ ๊ฐ’์œผ๋กœ ๋ฎ์–ด์“ฐ๊ฒŒ ๋œ๋‹ค.
  • ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Object.assign() ์‚ฌ์šฉ

  • Object.assign()๋ฅผ ์‚ฌ์šฉํ•ด ๋นˆ ๊ฐ์ฒด์— ์†์„ฑ์„ ๋ณต์‚ฌํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋•Œ ๋ณต์‚ฌ๋œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์กฐ์ž‘ํ•˜๋ฏ€๋กœ ์›๋ณธ์˜ ๋ถˆ๋ณ€์„ฑ์€ ์œ ์ง€๋˜์—ˆ๋‹ค.
const [myObject, setMyObject] = useState({ name: 'John', age: 25 });

const updateObject = (newData) => {
  setMyObject((prevObject) => Object.assign({}, prevObject, newData));
};

console.log(updateObject({ age: 26 })); // { name: 'John', age: 26 }
๋ฐ˜์‘ํ˜•