[React 영화 서비스 만들기] Memo

2024. 7. 8. 16:13·React

컴포넌트 render 원리

첫번째 버튼(저장)

onClick 이 되면 value가 재설정됨

value가 바뀔 때(상태가 바뀔 때) 다시 App이 render됨

 

부모(App)이 state를 변경함

App(컴포넌트)의 상태가 바뀌면 다시 render 되는것

 

<script src="https://unpkg.com/react@17.0.2/umd/react.development.js"></script> <!-- react 임포트 -->
<script src="https://unpkg.com/react-dom@17.0.2/umd/react-dom.development.js"></script> <!-- react-dom 임포트 -->
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script type="text/babel">
  function Btn({ text, onClick }) {
     console.log(text, ' rendered');
     return <button
             style={{
                     backgroundColor: 'tomato',
                     color: 'white',
                     padding: '10px 20px',
                     border: 0,
                     borderRadius: 10,
                    }}
              onClick={onClick}
             >{text}</button>
   }
    function App() {
        const [value, setValue] = React.useState('저장');
        const changeValue = () => setValue('되돌리기');
        console.log('App rendered');
        return (
            <div>
                <Btn text={value} onClick={changeValue}/>
                <Btn text='계속'/>
            </div>
        );
    }
    const root = document.getElementById("root");
    ReactDOM.render(<App />, root);
</script>

 

 

※ 하지만, 하나의 컴포넌트가 천개의 컴포넌트를 그리고 있다고 상상해봤을 때

부모의 상태가 변경되었다고 모든 컴포넌트를 re-render하는 것은

매우 비효율적이며 속도가 느려지는 원인이 될 수 있다.

 

Memo를 사용하여 수정

새로운 버튼만 re-render

const MemorizedBtn = React.memo(Btn);

function App() {
    const [value, setValue] = React.useState('저장');
    const changeValue = () => setValue('되돌리기');
    return (
        <div>
            <MemorizedBtn text={value} onClick={changeValue}/>
            <MemorizedBtn text='계속'/>
        </div>
    );
}

 

 

 

 

'React' 카테고리의 다른 글

[React 영화 서비스 만들기] 프로젝트 생성  (0) 2024.07.08
[React 영화 서비스 만들기] Prop Types  (0) 2024.07.08
React | 포트 변경하기  (0) 2023.12.09
React | 프로젝트 시작하기  (0) 2023.12.09
리액트 | ContextAPI  (0) 2023.01.25
'React' 카테고리의 다른 글
  • [React 영화 서비스 만들기] 프로젝트 생성
  • [React 영화 서비스 만들기] Prop Types
  • React | 포트 변경하기
  • React | 프로젝트 시작하기
개발 공부
개발 공부
  • 개발 공부
    개발 공부
    개발 공부
  • 전체
    오늘
    어제
    • 전체보기 (163) N
      • 프로젝트 (1)
      • JavaScript (46) N
      • Node.js (3)
      • Next.js (5)
      • React (17)
      • NoSQL (0)
      • HTML,CSS (3)
      • CS (6)
      • Java (35)
      • Spring (6)
        • Spring의 정석 (1)
      • Spring boot (1)
      • MySQL (1)
      • 리눅스 (16)
      • JSP (9)
      • AWS (0)
      • git (2)
      • 알고리즘 (1)
      • ect (7)
      • Project (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    티스토리챌린지
    오블완
    자바
    자바의 정석
    Java의 정석
    Java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
개발 공부
[React 영화 서비스 만들기] Memo
상단으로

티스토리툴바