React - state (2) Array ๋ณ€๊ฒฝ

TH_velogยท2023๋…„ 9์›” 1์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
7/16
post-thumbnail
post-custom-banner

๐Ÿ–‹๏ธ์ƒ์ดˆ๋ณด์˜ ๊ธฐ๋ก์šฉ Velogโœ…
โ€ป ์ž์„ธํ•œ ์„ค๋ช…์€ ๊ตฌ๊ธ€๋ง ๋‹ค๋ฅธ ๋ถ„๋“ค ์ฐธ๊ณ  โœ”๏ธ

๐Ÿ“ŒArray ๋ณ€๊ฒฝ

๐Ÿ“๋ฒ„ํŠผ ํด๋ฆญ ์‹œ Array ๋ณ€๊ฒฝํ•˜๊ธฐ

โš ๏ธ ํ…Œ์ŠคํŠธ ๊ด€๋ จ ํ•„์š” ์—†์ด ํ•ด๋‹ต ๊ถ๊ธˆํ•˜์‹  ๋ถ„์€
ํ•˜๋‹จ ๐ŸŽˆ state ๋ฐฐ์—ด ๋ณ€๊ฒฝ ์„ฑ๊ณต โฌ…๏ธ ํ™•์ธํ•ด ์ฃผ์„ธ์š”

๐ŸŽˆ์ค€๋น„

๐Ÿ‘‡์•„๋ž˜์™€ ๊ฐ™์ด ์ค€๋น„๋ฅผ ํ–ˆ์Šต๋‹ˆ๋‹ค!

function State2 () {
  const [arr, setArr] = useState(["๋ฐฐ์—ด1","๋ฐฐ์—ด2","๋ฐฐ์—ด3"]);
  
  function arrChange1() {
    console.log("arr ๋ณ€๊ฒฝํ•˜๊ธฐ!");
    console.log(arr);
  }
  return (
    <div className="wrap">
      <div className="box1">
        <p>{arr}</p>
        <p>{arr[0]}</p>
        <p>{arr[1]}</p>
        <p>{arr[2]}</p>
        <hr />
        <button type="button" onClick={arrChange1}>
          ๋ณ€๊ฒฝ ๋ฒ„ํŠผ
        </button>
      </div>
    </div>
  )
}

โœ”๏ธ {arr} : useState ๊ธฐ๋ณธ ๊ฐ’ -> ๋ฐฐ์—ด ๊ฐ’์„ ๋ถˆ๋Ÿฌ์™”์Šต๋‹ˆ๋‹ค.
โœ”๏ธ {arr[0]} : ์ˆœ์„œ์— ๋งž๋Š” ๊ฐ’๋งŒ ๋…ธ์ถœ
โœ”๏ธ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ arrChange ํ•จ์ˆ˜ ๋‚ด console.log ๊ฐ’์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

๐ŸŽˆ๋ณ€๊ฒฝํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝํ•˜๊ธฐ

โœ”๏ธ state ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด set๋ณ€๊ฒฝํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉ!!

โœ”๏ธ๋ณ€๊ฒฝํ•จ์ˆ˜ setArr([์ƒˆ๋กœ์šด ๋ฐฐ์—ด๊ฐ’])์„ ์ž…๋ ฅํ•ด์„œ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค

โœ”๏ธ ์ •์ƒ์ ์œผ๋กœ ๋ณ€๊ฒฝ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

โš ๏ธ ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ๋งŒ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์„ ๋•Œ / ๋ฐฐ์—ด ์•ˆ์— ๊ฐ’์ด ์—„์ฒญ ๋งŽ๋‹ค๋ฉด??

โœ”๏ธ ์œ„ ์ด๋ฏธ์ง€ ์ฒ˜๋Ÿผ ๊ฐ€๋Šฅ์€ ํ•˜์ง€๋งŒ ๊ต‰์žฅํžˆ ๋ถˆํŽธํ•˜๊ณ  ๋ณด๊ธฐ๋„ ์ข‹์ง€๊ฐ€ ์•Š์Šต๋‹ˆ๋‹ค!!

๐ŸŽˆ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ณ€๊ฒฝ ๋„์ „

โœ… ๋ณ€๊ฒฝํ•จ์ˆ˜ ๋‚ด์—์„œ ๊ฐ’์„ ๋งˆ์Œ๋Œ€๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ

์ฒซ๋ฒˆ์งธ ๋„์ „ ๋ฐฐ์—ด[0] ์ง์ ‘ ๋ณ€๊ฒฝ

setArr(arr[0]="์•ผํ˜ธ");

โœ”๏ธ ๊ธฐ์กด ๋ฐฐ์—ด์€ ๋‹ค ์‚ฌ๋ผ์ง€๊ณ  ์•ผํ˜ธ๋งŒ ๋‚˜์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค
โš ๏ธ setArr()๋‚ด์— ์ €๋ ‡๊ฒŒ ๋งˆ์Œ๋Œ€๋กœ ๋ณ€๊ฒฝ์„ ํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ ๊ฐ’์ด ๋ฐ”๋€Œ๊ฒŒ ๋˜๋‹ˆ ํ•˜์ง€ ๋ง์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค!

โœ”๏ธ console.log๋กœ ํ™•์ธ ํ–ˆ์„ ๋•Œ๋Š” ๋ฐ”๋€ ๊ฐ’์ด ์ œ๋Œ€๋กœ ๋‚˜์˜ค๋Š”๋ฐ!?
โœ”๏ธ console.log๋ฅผ ํ†ตํ•ด ๋ณด์—ฌ์ง€๋Š” ๊ฒƒ๋งŒ ์ €๋ ‡๊ฒŒ ๋ณด์—ฌ์งˆ ๋ฟ ์‹ค์ œ๋กœ arr ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์–ด ๋ฆฌ๋ Œ๋”๋ง์ด ๋  ๊ฒฝ์šฐ ๊ฐ’์€ ์ „ํ˜€ ๋‹ค๋ฅด๊ฒŒ ๋‚˜์˜ต๋‹ˆ๋‹ค!

โœ”๏ธ ํ™•์ธ์„ ์œ„ํ•ด useEffect๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ console.log()๋กœ ํ™•์ธ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค ๊ฒฐ๊ณผ๋Š”!
โœ”๏ธ useEffect์˜ ๋‘˜์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ []์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š”๋ฐ ๊ฑฐ๊ธฐ์— state ๊ฐ’์„ ๋„ฃ์œผ๋ฉด state ๊ฐ’์ด ๋ณ€๊ฒฝ ๋  ๋•Œ useEffect ์•ˆ์— ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค
โœ”๏ธ ,[arr] ๐Ÿ‘ˆarr์„ ์ž…๋ ฅํ–ˆ์œผ๋‹ˆ arr ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋ฉด useEffect console.log ์‹คํ–‰! ๋ณ€๊ฒฝ๋œ arr์˜ ๊ฐ’์œผ๋กœ ์•ผํ˜ธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

โœ”๏ธ ์ง€๊ธˆ ๋‹น์žฅ์€ ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ๊ฐ€๋Š” ๋ถ€๋ถ„์ผ ์ˆ˜ ์žˆ์œผ๋‹ˆ ํŒจ์Šค!

โŒ์ด๋ ‡๊ฒŒ ๋ณ€๊ฒฝํ•˜์ง€ ๋ง๊ธฐ!
setArr(arr[0]="์•ผํ˜ธ");

โœ… ๋ฐฐ์—ด๊ฐ’ ๋ณ€๊ฒฝ ํ›„ ๋ณ€๊ฒฝํ•จ์ˆ˜์— ๋„ฃ๊ธฐ

โœ”๏ธ ๋ณ€๊ฒฝํ•จ์ˆ˜ ๋‚ด์—์„œ ๋ฐ”๋กœ ํ•˜๋ฉด ์•ˆ๋˜๋‹ˆ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€๊ฒฝํ•จ์ˆ˜ ๋ฐ”๊นฅ์—์„œ ๋ณ€๊ฒฝ์„ ๋ฏธ๋ฆฌ ์‹คํ–‰ํ•˜๊ณ  ๋ณ€๊ฒฝ๋œ ๊ฐ’์„ set๋ณ€๊ฒฝํ•จ์ˆ˜์— ์ž…๋ ฅ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค!
โœ”๏ธ ๊ฒฐ๊ณผ๋Š”!!? ์‹คํŒจ โŒ ํ™”๋ฉด์ด ๋ฐ”๋€Œ์ง€ ์•Š์•„์š”!
โœ”๏ธ ๊ทธ ์ด์œ ๋Š” arr ๊ฐ’์ด ๋ณ€๊ฒฝ์ด ๋œ์ ์„ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ•ด์„œ ๋ฆฌ๋ Œ๋”๋ง์ด ๋˜์ง€ ์•Š์•„ ๋ณ€๊ฒฝ๋œ ๊ฐ’์ด ์ ์šฉ์ด ๋˜์ง€ ์•Š์•„์„œ ์ž…๋‹ˆ๋‹ค

โš ๏ธ(??) ๋ฌด์Šจ ๋ง์ผ๊นŒ์š”?? ๋ณ€๊ฒฝํ–ˆ๋Š”๋ฐ ๋ณ€๊ฒฝ ๋˜์ง€ ์•Š์•˜๋‹คโ‰๏ธ

โœ”๏ธ ๊ธฐ์กด state ๊ฐ’๊ณผ set๋ณ€๊ฒฝํ•จ์ˆ˜(๋ณ€๊ฒฝ๊ฐ’)์ด ๊ฐ™์ง€ ์•Š์•„์•ผ ๋‹ค๋ฅด๋‹ค๋Š”๊ฒƒ์„ ์•Œ๊ณ  set๋ณ€๊ฒฝํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๊ณ  ๋ฆฌ๋ Œ๋”๋ง์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค
โœ”๏ธ ํ•˜์ง€๋งŒ ์œ„์˜ ์ด๋ฏธ์ง€๋ฅผ ๋ณด๋ฉด 11๋ผ์ธ์— console.log(arr) ๊ฐ’์„ ๋ณด๋ฉด
setArr์‹คํ–‰ ์ „ arr์˜ ๊ฐ’์€ ์•ผํ˜ธ๋กœ ๋ฐ”๋€Œ์–ด์ ธ ์žˆ๋Š” ์ƒํƒœ์ด๊ณ ,
์•ผํ˜ธ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฐ’์„ setArr(arr)์„ ํ†ตํ•ด ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ
์ด๋ฏธ arr ๊ณผ setArr(arr)์€ ๋น„๊ตํ–ˆ์„ ๋•Œ ๊ฐ’์ด ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•„ ๋ฆฌ๋ Œ๋”๋ง์ด ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

โŒ ์‹คํŒจ

โœ… ๋ฐฐ์—ด ๋ณต์‚ฌ ํ›„ ๋ณ€๊ฒฝ

โš ๏ธ array/object๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์›๋ณธ์€ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ๋ฐฐ์—ด์„ ๋ณต์‚ฌ ํ›„ ์‚ฌ์šฉํ•ด์•ผ ์ข‹์Šต๋‹ˆ๋‹ค
์›๋ณธ ๋ฐ์ดํ„ฐ๋ฅผ ํ•„์š”๋กœ ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์‚ฌ ํ›„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

โœ”๏ธ newArr๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์„œ arr ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์ž…๋ ฅํ•˜์—ฌ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค ๊ทธ ๊ฒฐ๊ณผ๋Š”?

โœ”๏ธ ๋ณ€๊ฒฝ ๋ฒ„ํŠผ์„ ์•„๋ฌด๋ฆฌ ๋ˆŒ๋ €์ง€๋งŒ ๊ฐ’์ด ๋ณ€๊ฒฝ์ด ๋˜์ง€ ์•Š์•˜์–ด์š” ๐Ÿ˜…
โœ”๏ธ ๊ทธ ์ด์œ ๋Š” arr๊ฐ’๊ณผ newArr๊ฐ’์ด ์„œ๋กœ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค

โœ”๏ธ ์œ„์—์„œ ์ด์•ผ๊ธฐ ํ–ˆ๋“ฏ์ด arr๊ฐ’๊ณผ newArr ๊ฐ’์ด ๊ฐ™์•„์„œ ๋ฆฌ๋ Œ๋”๋ง์ด ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค...

const newArr = arr;

โœ”๏ธ = ๋ฅผ ํ†ตํ•ด arr ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋˜์—ˆ๊ณ  ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉํ–ฅ๋„ arr๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ ์ž…๋‹ˆ๋‹ค!

โœ”๏ธ ์ฆ‰ ์ด๋ฆ„๋งŒ ๋ฐ”๋€Œ์—ˆ์ง€ newArr ์ˆ˜์ •์ด ๊ณง arr ์ˆ˜์ •์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๐ŸŽˆstate ๋ฐฐ์—ด ๋ณ€๊ฒฝ ์„ฑ๊ณต

โœ”๏ธ ๋ฐฐ์—ด์„ ๋ณต์‚ฌํ•  ๋•Œ Spread Operator(์Šคํ”„๋ ˆ๋“œ ์—ฐ์‚ฐ์ž)๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ
โœ”๏ธ ๊ธฐ์กด์˜ ๊ฐ’์€ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ

EX) ๊ฐ„๋‹จํ•˜๊ฒŒ ํ™•์ธ ํ•˜๋Š” ์Šคํ”„๋ ˆ๋“œ ์‚ฌ์šฉ๋ฒ• . . .์„ ์‚ฌ์šฉํ•œ๋‹ค
๐Ÿ‘‰ ...๋ฐฐ์—ด๊ฐ’

โœ… Array

const ex = ["a","b","c"];
const test1 = [...ex];
const test2 = ["์•ผํ˜ธ",...ex];
const test3 = ["1๋ฒˆ",...ex,"3๋ฒˆ"];

console.log(...ex) // a b c
console.log(test1) // (3) ['a', 'b', 'c']
console.log(test2) // (4) ['์•ผํ˜ธ', 'a', 'b', 'c']
console.log(test3) // (5) ['1๋ฒˆ', 'a', 'b', 'c', '3๋ฒˆ']

โœ… Object

const objectTest0 = {name:"R", age:23};
const objectTest1 = {...objectTest0};
const objectTest2 = [{name:"R"},{age:23}];

console.log(...objectTest0) // โŒ์˜ค๋ฅ˜ / ํ•ด๊ฒฐ:[ ] ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค
console.log(objectTest1)  // {name: 'R', age: 23}
console.log(...objectTest2) // {name: 'R'} {age: 23}

โœ”๏ธ ์œ„์— ๊ฐ„๋‹จํžˆ ์‚ดํŽด๋ณธ ๊ฒฐ๊ณผ [ ๋Œ€๊ด„ํ˜ธ ] ์•ˆ์— ๋‚ด์šฉ๋ฌผ๋งŒ ๋นผ์„œ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌ๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด ์ดํ•ดํ•˜๊ธฐ ํŽธํ•ฉ๋‹ˆ๋‹ค!
์ž์„ธํ•œ ์ •๋ณด๋Š” ๊ตฌ๊ธ€๋ง

โœ… ์„ฑ๊ณต

const [arr, setArr] = useState(baseData);

  function arrChange1() {
    const newArr = [...arr];
    newArr[0] = "ํ•ด๊ฒฐ";
    setArr(newArr)
  }

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜

profile
๊ณต๋ถ€&๊ธฐ๋ก
post-custom-banner

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