๐๏ธ์์ด๋ณด์ ๊ธฐ๋ก์ฉ Velogโ
โป ์์ธํ ์ค๋ช
์ ๊ตฌ๊ธ๋ง ๋ค๋ฅธ ๋ถ๋ค ์ฐธ๊ณ โ๏ธ
โ ๏ธ ํ
์คํธ ๊ด๋ จ ํ์ ์์ด ํด๋ต ๊ถ๊ธํ์ ๋ถ์
ํ๋จ ๐ 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 ๊ฐ์ ํ์ธํ ์ ์์ต๋๋ค
โ๏ธ๋ณ๊ฒฝํจ์ 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๋ฅผ ์ฌ์ฉํ ๋ ์๋ณธ์ ๊ทธ๋๋ก ๋๊ณ ๋ฐฐ์ด์ ๋ณต์ฌ ํ ์ฌ์ฉํด์ผ ์ข์ต๋๋ค
์๋ณธ ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ํ ๊ฒฝ์ฐ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ณต์ฌ ํ ์ฌ์ฉํด์ผ ํฉ๋๋ค
โ๏ธ ๋ณ๊ฒฝ ๋ฒํผ์ ์๋ฌด๋ฆฌ ๋๋ ์ง๋ง ๊ฐ์ด ๋ณ๊ฒฝ์ด ๋์ง ์์์ด์ ๐
โ๏ธ ๊ทธ ์ด์ ๋ arr๊ฐ๊ณผ newArr๊ฐ์ด ์๋ก ๊ฐ๊ธฐ ๋๋ฌธ์
๋๋ค
โ๏ธ ์์์ ์ด์ผ๊ธฐ ํ๋ฏ์ด arr๊ฐ๊ณผ newArr ๊ฐ์ด ๊ฐ์์ ๋ฆฌ๋ ๋๋ง์ด ์ด๋ฃจ์ด์ง์ง ์์์ต๋๋ค...
const newArr = arr;
โ๏ธ = ๋ฅผ ํตํด arr ๊ทธ๋๋ก ๊ฐ์ ธ์ค๊ฒ ๋์๊ณ ์์ ํ๋ ๋ฐฉํฅ๋ arr๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๊ธฐ ๋๋ฌธ ์ ๋๋ค!
โ๏ธ ์ฆ ์ด๋ฆ๋ง ๋ฐ๋์์ง newArr ์์ ์ด ๊ณง arr ์์ ์ด ๋์์ต๋๋ค.
โ๏ธ ๋ฐฐ์ด์ ๋ณต์ฌํ ๋ 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)
}
๊ฐ์ฌํฉ๋๋ค. ๐