TIL 2021.01.17
class Item extends Component {
...
// 별다른 함수 없이 state 초기값 설정
this.state = {
name: string,
count: number,
}
// state값 변경 : this.setState함수
onClick = {()=>{
this.setState({count: count+1});
}}
render() {
return <div></div>
}
}
함수형 컴포넌트의 Hook을 이용하면 생명주기 메서드에 따라서가 아니라 코드가 무엇을 하는지에 따라 나눌 수가 있습니다
setState함수
가 state를 변경함 const [state, setState] = useState(initialState);
setState(newState);
setState(prevState => prevState+1);
React에서 state는 불변성을 유지해야 한다.
// 기존 people 배열엔 영향 없이 새로운 배열을 생성
const newPeople = people.filter((person) => {
return person.id !== id;
});
setPeople(newPeople);
React가 화면을 업데이트하는 과정
1.setState
를 호출 (혹은 부모로부터 props를 전달 받음)
2.shouldComponentUpdate
의 반환값이 true인 경우render
호출
3. 가상 DOM과 실제 DOM을 비교해서 변경사항이 있으면 화면을 다시 그림
setState
함수는 LifeCycle API의 shouldComponentUpdate(nextProps, nextState)
를 트리거하는데, 이 메소드의 boolean 반환값에 따라 render
호출 여부가 결정된다.shouldComponentUpdate
는 기본값으로 true를 리턴하기 때문에, 이 메소드를 재정의하지 않으면 setState
호출마다 render
가 호출되는 것이다.shouldComponentUpdate
를 구현해야 하는데, 이때 state의 불변성이 유지되지 않으면 내부 값들을 하나하나 확인해야 하기 때문에 로직이 복잡해진다.