참고 블로그
1. 효율적인 상태업데이트 (얕은 비교 수행)
얕은 비교란 객체의 프로퍼티를 하나하나 다 비교하지 않고, 객체의 참조 주소값만 변경되었는지 확인합니다. 얕은 비교는 계산 리소스를 줄여주기 때문에 리액트는 효율적으로 상태를 업데이트 할 수 있습니다.
원시타입은 애시당초 불변성 특징을 가지고 있지만 참조타입인 객체나 배열의 경우 새로운 값을 변경할 때 원본 데이터가 변경이 됩니다(불변성이 지켜지지 않습니다). 이렇게 원본 데이터가 변경될 경우, 이 원본데이터를 참조하고 있는 다른 객체에서 예상치 못한 오류가 발생할 수 있습니다. 프로그래밍의 복잡도도 올라갑니다.
<이해과정>
객체 useState 선언 => 메모리에 할당 => 주소값이 찍힌다.
리액트는 메모리 주소를 비교한다.
다르면 리렌더링이 된다.
값을 바꾸면 => 주소값은 안 변하는데 데이터만 바뀐다. => 그럼 리렌더링이 안 된다.
그래서 set~ 을 이용하면 재선언해서 메모리 주소가 다른 또 다른 값이 생긴다
그럼 리액트가 알아먹고 리렌더링을 한다.
전 종이에서 1,2,3,... => 새 종이에 1,2,3 + a를 한다.
그러면 메모리에 값도 변경 안되고 새롭게 변경된 값에 대한 리렌더링도 된다.
<멘토님 첨언>
<예시코드>
import React from 'react';
class App extends React.Component {
reRender = () => {
// calling the forceUpdate() method
this.forceUpdate();
};
render() {
console.log('Component is re-rendered');
return (
<div>
<h2>GeeksForGeeks</h2>
<button onClick={this.reRender}>Click To Re-Render</button>
</div>
);
}
}
export default App;
const handleChangeInput = (event) =>{
setTodo( {
...todo,
// 원래 있던 값 전개
[event.target.name] : event.target.value,
// 리스트로 들어오는 값 computed property로 값 매칭해주기
// setTodo(...~, todo)와 비슷한데 두 개를 한 번에 넣어준다. => 객체로 맞춰서
})
}
전체적으로 다시 만든 새로운 코드 깃허브 : 내 깃허브
push하다 생긴 오류로 찾은 블로그 :
참고블로그