리렌더링이 발생하는 상황

리렌더링 사이클

리렌더링 확인 방법

특정 state의 변화 확인 방법

렌더링 최적화 방법

  1. 리액트 컴포넌트가 렌더링 결과물을 지난번과 정확히 동일한 참조를 반환한다면, 리액트는 해당 하위 컴포넌트를 렌더링하는 것을 건너 뛴다.
import React, { ReactElement, useEffect, useState } from 'react';

const Parent = ({ children }: { children: ReactElement }) => {
  const [counter, setCounter] = useState(0);

  useEffect(() => {
    console.log('parent');
  });

  return (
    <div>
      <button onClick={() => setCounter((counter) => counter + 1)}>Count: {counter}</button>
      {children}
    </div>
  );
};

const Child = () => {
  useEffect(() => {
    console.log('child');
  });
  return <div>Hello</div>;
};

function App() {
  return (
    <Parent>
      <Child />
    </Parent>
  );
}

export default App;
import React, {  useEffect, useMemo, useState } from 'react';

const Child = () => {
  useEffect(()=>{
    console.log('child')
  })
  return (
    <div>Hello</div>
  )
}

function App() {
  const [counter1, setCounter1] = useState(0)
  const [counter2, setCounter2] = useState(0)

  useEffect(()=>{
    console.log('parent')
  })

  const memoizedElement = useMemo(()=>{
    return <Child/>
  // eslint-disable-next-line react-hooks/exhaustive-deps
  },[counter1])

  return (
    <div>
      <button onClick={()=> setCounter1(counter => counter+1)}>Counter 1: {counter1}</button>
      <button onClick={()=> setCounter2(counter => counter+1)}>Counter 2: {counter2}</button>
      {memoizedElement}
    </div>
  );
}

export default App;