Counter 프로젝트에 여러 개의 LifeCycle API를 만들어봅시다.
4장에서 작성했던 Counter 프로젝트에서 실습을 진행하겠습니다. 이전 페이지에서 언급했던 자주 쓰이는 LifeCycle API를 추가해보겠습니다. App 컴포넌트를 아래와 같이 수정해주세요.
import React, { Component } from "react";
import CountButton from "./components/CountButton";
import Number from "./components/Number";
import styled from "styled-components";
const Wrapper = styled.div`
margin: 0 auto;
display: flex;
flex-direction: column;
align-items: center;
width: 100px;
margin-top: 100px;
`;
const ButtonWrapper = styled.div`
width: 100%;
display: flex;
justify-content: space-between;
margin-bottom: 50px;
`;
class App extends Component {
state = {
number: 0
};
constructor(props) {
super(props);
console.log("constructor 호출");
}
componentDidMount() {
console.log("componentDidMount 호출");
}
shouldComponentUpdate(nextProps, nextState) {
console.log("shouldComponentUpdate 호출");
if (nextState.number % 3 === 0) return false;
return true;
}
componentDidUpdate(prevProps, prevState) {
console.log("componentDidUpdate 호출");
}
// 1. state를 업데이트하는 함수를 전달
countUp = () => {
this.setState(({ number }) => ({
number: number + 1
}));
};
// 2. setState 함수 앞에서 값을 받고 이를 전달
countDown = () => {
const { number } = this.state;
this.setState({ number: number - 1 });
};
render() {
// Destructing Assignment 문법을 사용한 방식
const { countUp, countDown } = this;
const { number } = this.state;
console.log("render 호출");
return (
<Wrapper>
<ButtonWrapper>
<CountButton onClick={countUp} text="+" />
<CountButton onClick={countDown} text="-" />
</ButtonWrapper>
<Number number={number} />
</Wrapper>
);
}
}
export default App;
위와 같이 만들고 콘솔 창을 확인해보세요. 그리고 앞서 말씀드렸던 순서대로 LifeCycle API가 호출되는지도 확인해보세요.

그리고 number가 3이 되었을 때, 컴포넌트가 리렌더링 되지 않는 것도 확인해보세요.