array/object 다룰 때 원본은 보존하는게 좋다. 나중에 필요할 수도 있기 때문에
즉, 무조건 복사본을 만들고 복사본을 고치자!!//글제목이라는 list변수를 copy라는 변수에 복사한다. let copy = [...글제목] //그리고 우리는 copy라는 복사한 list의 0번째에 '여자 코트 추천'을 넣는다. copy[0] = '여자 코트 추천'; //그리고나서 수정한 list변수인 copy를 state 변경함수인 글제목변경에 넣어주면 원래 있던 제목 list를 바꿀 수 있다!! 글제목변경(copy);
기존state == 신규 state의 경우 변경 안해줌 (자원절약차원)
array/object 담은 변수엔 화살표만 저장됨
//[1,2,3]이 어딨는지 알려주는 화살표만 들어있음!!(RAM에 저장되어 있고, arr는 가리키기만 한다.) let arr = [1,2,3];
이 때, array를 수정하면 변수에 있던 화살표는 수정이 안된다. 그래서 array만 수정하면 내가 원하던 값으로 변경이 안된다. 왜냐하면 컴퓨터는 기존state와 신규state가 같다고 생각하기 때문에.
즉, 변수1 & 변수2의 주소값이 같으면 변수1==변수2 비교하면 true.
array/object가 이렇게 주소값을 가지면서 복사를 해도 변경이 안되는 이유는 reference data type이라서 그렇다.
그래서 [...변수]를 쓰면 아예 다른 주소값을 가지기 때문에 이제야 state가 수정이 된다.
<button onClick={()=>{
let copy = [...글제목];
copy[0] = '여자코트 추천';
글제목변경(copy);
}}>글수정</button>
1.
<button onClick={()=>{
let copy = [...글제목];
글제목변경(copy.sort()); //copy.sort();랑 글제목변경(copy)를 한 줄에 해버림
}}>가나다순정렬</button>
2.
<button onClick={()=>{
let copy = [...글제목];
copy.sort();
글제목변경(copy);
}}>가나다순정렬</button>