static getDerivedStateFromProps(nextProps, prevState){
if(nextProps.color !== prevState.color){
return {color: nextProps.color}
}
return null;
}
// hooks
function ScrollView({colorProps}) {
const [color, setColor] = useState("");
if (colorProps !== color) {
setColor(row);
}
return `Scrolling down: ${isScrollingDown}`;
}
shouldComponentUpdate(nextProps, nextState){
if(nextProps.color !== this.props.color){
return true
}
return false
}
hook에서 React.memo를 사용하여 리렌더링 방지 가능하지만 state나 props가 변경되면 리렌더링된다. 또한 props만 변경 시 리렌더링 방지한다.
componentWillUnmount : 여기서는 주로 DOM에 직접 등록했었던 이벤트를 제거
다음의 코드와 같이 생명주기 메서드들을 이해해 보자
class Clock extends React.Component {
constructor(props) {
super(props);
this.state = {date: new Date()};
}
componentDidMount() {
this.timerID = setInterval(
() => this.tick(),
1000
);
}
componentWillUnmount() {
clearInterval(this.timerID);
}
tick() {
this.setState({
date: new Date()
});
}
render() {
return (
<div>
<h1>Hello, world!</h1>
<h2>It is {this.state.date.toLocaleTimeString()}.</h2>
</div>
);
}
}
ReactDOM.render(
<Clock />,
document.getElementById('root')
);
state 업데이트는 비동기적일 수 있기 때문에 비동기 처리해주는 setState를 사용하여 state를 업데이트 한다.
state 업데이트 잘못된 예시
this.setState({
counter: this.state.counter + this.props.increment,
});
state 업데이트
this.setState((state, props) => ({
counter: state.counter + props.increment
}));
참조 : setState 사용하는 이유
props vs state
props
태어날 때 결정되는 것
state