728x90

자식 컴포넌트 두개가 있는데, 한쪽 자식에게 전달하는 props에만 변경이 생긴경우,

특별한 조건을 주지 않는한 부모는 그 둘 모두를 렌더링(rendering) 하게 된다. 

 

그런데 만약 자식 컴포넌트가 1000개 라면 자식 하나의 변경만으로도 나머지 자식들 모두가 새롭게 렌더링되야하므로 시간이 지연이 발생하게 될 것이다. 

 

이때 유용하게 사용되는 메소드가 React.memo()다.

 

아래와 같이 React.memo()를 사용하면 처음에는 두 컴포넌트가 모두 렌더링 되고,

이후에는 변경된 자식 컴포넌트만 렌더링이 된다.

function Btn({ text, changeValue }) {
  console.log(text, "was chaneged"); 
  
  // 처음 렌더링 됐을 때,
  // Save Changes was chaneged
  // Continue was chaneged
  
  // onClick 이벤트 적용 후 렌더링 됐을 때,
  // Revert Changes was chaneged
  
  return (
    <button
      style={{
        backgroundColor: "tomato",
        color: "white",
        padding: "10px 20px",
        border: 0,
        borderRadius: 10,
      }}
      onClick={changeValue}
    >
      {text}
    </button>
  );
}

const MemorizedBtn = React.memo(Btn);

function App() {
  const [value, setValue] = React.useState("Save Changes");
  const changeValue = (event) => {
    setValue("Revert Changes");
  };
  return (
    <div>
      <MemorizedBtn text={value} changeValue={changeValue} />
      <MemorizedBtn text="Continue" />
    </div>
  );
}
반응형

'Programming > React' 카테고리의 다른 글

[React]Frontend 초기 세팅  (0) 2022.02.04
[React.js]Link로 props 전달하기  (0) 2022.01.13
[React]export와 export default의 차이  (0) 2021.11.30

+ Recent posts