
메모리에 있는 값을 변경할 수 없는 것
let number = 1;
let secondNumber = 1;
console.log(number === secondNumber); // True
let obj_1 = {name: 'kim'};
let obj_2 = {name: 'kim'};
console.log(obj_1===obj_2); // False
obj_1과 obj_2는 각각 주소를 가리키고 있다.
리액트에서 화면을 리렌더링 할지 말지 결정할 때 state의 변화를 확인한다. state가 변했는지 변하지 않았는지를 확인하는 방법은 state의 변화 전, 후의 메모리 주소를 비교하는 것이다. 불변성을 지켜주지 않고, 직접 수정을 가하면 메모리주소는 변함이 없게 되는데, 리액트에선 이를 인식하지 못하고 리랜더링이 발생하지 않게 된다.
function App(){
const [dogs, setDogs] = useState(["말티즈"]);
function onClickHandler(){
setDogs([...dogs, "푸들"]);
}
...
spread operator를 통해 dogs를 복사하고 항목을 추가해준다.
인자를 변경하지 않고, 참조하여 새로운 값을 반환하는 함수
const addSixPure = (arr)=>{
newArr = [...arr, 6];
return newArr;
};