useState
혹은 this.setState
등을 통해 상태가 바뀌면 리렌더링이 발생한다.setCount(count + 1)
처럼 state를 업데이트하면, 해당 컴포넌트와 자식 컴포넌트가 새 상태에 맞춰 다시 그려진다.React.memo
나 PureComponent
(클래스형 컴포넌트일 때) 등을 통해 불필요한 리렌더링을 줄일 수 있다.React.createContext
로 만든 Context의 값이 변경되면, 그 Context를 구독(consume)하고 있는 모든 컴포넌트가 리렌더링된다.React의 컴포넌트가 React.memo()로 래핑 되면, React는 컴포넌트를 렌더링하고 그 결과를 메모이제이션한다. 다음 렌더링이 일어날 때 props가 같다면, React는 메모이제이션된 내용을 재사용한다.
export function App(){
const [title,setTitle] = useState('movie1');
const [releaseDate,setReleaseDate] = useState('2022-8-09');
}
export function Movie({releaseDate}) {
useEffect(() => {
console.log('rendered');
})
return (
<div>
<div>Movie title: {title}</div>
<div>Release date: {releaseDate}</div>
</div>
);
}
export default memo(Movie);
React.memo
를 써도 “props가 바뀌었”기 때문에 재렌더링을 막을 수 없다.
React.memo
가 큰 효과가 없다.React.memo
는 이 부분에서 함수 재호출 자체도 스킵하여 “불필요한 연산”을 줄여준다.React.memo
로 불필요한 함수 호출까지 방지할 수 있으므로 의미가 있다.