[React] React.memo() : 리렌더링 방지 방법

2026. 2. 8. 15:30·Frontend/React
니콜라스 쌤의 노마드코더 'ReactJS로 영화 웹 서비스 만들기' 보면서 공부한 내용입니다.
부족한 내용이나 잘못된 내용은 댓글남겨주시면 감사하겠습니다!

출처 : https://nomadcoders.co/react-for-beginners

 

이전글에 이어,

[React] 함수형 컴포넌트의 props 사용

 

이번에는 props를 조금 더 다양하게 사용해보겠습니다.

 

1. 주의사항!

- 이 코드는 어떤 역할을 할까요? 버튼을 클릭하면 Save Changes가 Revert Changes로 텍스트가 변경되는?

놀랍게도 아닙니다. <Btn>은 저희가 만든 컴포넌트로, 여기서 사용하는 onClick은 props의 명칭이지 이벤트리스너가 아닙니다.

function Btn({ text }) {
    return (
        <button>
            {text}
        </button>
    );
}

function App() {
    const [value, setValue] = React.useState("Save Changes");
    const chageValue = () => setValue("Revert Changes");
    return (
        <div>
            <Btn text={value} onClick={chageValue} /> 
            <Btn text="Continue" />
        </div>
    );
}

 

2. props 지정 (타입 종류)

그래서 이벤트리스너로 사용하고 싶을 경우, 다음처럼 props를 명확하게 지정을 해주어야합니다.

props를 지정한다고 해서 자동으로 return에 들어가지 않고 꼭 반드시 명시를 해주어야합니다.

이번에 설정한 것처럼 props는 문자형, boolean, 숫자, 함수 등 다양하게 사용 가능합니다.

function Btn({ text, onClick }) {
    return (
        <button
            onClick={onClick}
            style={{
                backgroundColor: "tomato",
                color: "white",
                padding: "10px 20px",
                border: 0,
                borderRadius: "10px",
            }}
        >
            {text}
        </button>
    );
}

function App() {
    const [value, setValue] = React.useState("Save Changes");
    const chageValue = () => setValue("Revert Changes");
    return (
        <div>
            <Btn text={value} onClick={chageValue} /> {/* 여기서 onClick은 props임*/}
            <Btn text="Continue" />
        </div>
    );
}

 

3. 컴포넌트 동작흐름

이제 함수형 컴포넌트의 리렌더링 시점을 알아보겠습니다.

콘솔을 보시면 처음에 버튼이 생성되면서 Save Changes, Continue가 찍히는 것을 보실 수 있습니다.

그 다음 save 버튼을 클릭 시 revert changes와 continue가 다시 출력 되는 것을 확인 할 수 있습니다.

 

동작 흐름:

1. Save Changes 버튼 클릭 시 setValue가 호출됩니다.

2. App 컴포넌트의 state가 변경되었으므로, React는 App을 다시 실행합니다.

3. App이 다시 실행되면서 그 안에 작성된 <Btn text={value} ... />와 <Btn text="Continue" /> 코드를 둘 다 다시 읽습니다.

4. React는 Btn 함수를 다시 호출하게 되고, 그 안에 있는 console.log가 실행되는 것이죠.

Continue 버튼의 Props(text="Continue")는 변하지 않았지만, React는 부모가 호출될 때 자식들도 일단 다 같이 호출하는 것이 기본값입니다.

function Btn({ text, chageValue }) {
    console.log(text, ": was Rendered");
    return (
        <button
            onClick={chageValue}
        >
            {text}
        </button>
    );
}

function App() {
    const [value, setValue] = React.useState("Save Changes");
    const chageValue = () => setValue("Revert Changes");
    return (
        <div>
            <Btn text={value} chageValue={chageValue} /> 
            <Btn text="Continue" />
        </div>
    );
}

 

 

4. React Memo

여기서 Continue 버튼은 변경된 점이 없는데 새로 생겼습니다. 

 

(이걸 방지하려면 React.memo를 사용해야 합니다.)

마치 momorize(기억)하는 것처럼 Continue 버튼의 리랜더링을 결정할 수 있습니다. props가 변경되지 않는다는 한에서 해당 컴포넌트를 다시 그릴지 말지를 말이죠.

const MemorizedBtn = React.memo(Btn);

을 사용 후 Btn태그를 MeorizedBtn으로 변경해주면, 원하는 대로 Revert Changes 버튼만 리렌더링 되는 것을 확인하실 수 있습니다.

function Btn({ text, chageValue }) {
    console.log(text, ": was Rendered");
    return (
        <button
            onClick={chageValue}
        >
            {text}
        </button>
    );
}
const MemorizedBtn = React.memo(Btn);
function App() {
    const [value, setValue] = React.useState("Save Changes");
    const chageValue = () => setValue("Revert Changes");
    return (
        <div>
            <MemorizedBtn text={value} chageValue={chageValue} /> {/* 여기서 onClick은 props임*/}
            <MemorizedBtn text="Continue" />
        </div>
    );
}

 

이렇게 React.memo() 를 이용하면 컴포넌트의 Props가 변경되지 않은 경우 리렌더링 패스하실 수 있습니다.

 

다음 글에서는 Prop Types에 대해 조금 더 알아보겠습니다.

[React] props types 자료형, 필수 값, 기본 값 지정

 

읽어주셔서 감사합니다.

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

[React] create react app 프로젝트 세팅  (0) 2026.02.08
[React] props types 자료형, 필수 값, 기본 값 지정  (0) 2026.02.08
[React] 함수형 컴포넌트의 props 사용  (0) 2026.02.07
[React] 단위변환기 완성 (minute&hours, km&miles)  (0) 2026.02.07
[React] Divide : 작은 컴포넌트로 분할 - 단위변환기 3  (0) 2026.02.07
'Frontend/React' 카테고리의 다른 글
  • [React] create react app 프로젝트 세팅
  • [React] props types 자료형, 필수 값, 기본 값 지정
  • [React] 함수형 컴포넌트의 props 사용
  • [React] 단위변환기 완성 (minute&hours, km&miles)
min_sol
min_sol
  • min_sol
    비글개발연구소🐾
    min_sol
  • 전체
    오늘
    어제
    • 분류 전체보기 (278)
      • Programming (128)
        • Algorithm (52)
        • JAVA (40)
        • GIS (5)
        • PyQt (10)
        • C# (11)
        • Mobile (6)
        • AI (4)
      • Backend (36)
        • Spring (14)
        • JSP (11)
        • Network (5)
      • Frontend (29)
        • React (11)
        • Vue (13)
        • Next.js (4)
      • Database (10)
        • PostgreSQL (1)
        • Oracle (8)
        • Elasticsearch (1)
      • DevOps (8)
        • Linux (7)
        • Mac (1)
      • Tools (0)
        • IntelliJ (1)
        • GitHub (10)
        • RPA (20)
      • Security (9)
      • etc (21)
        • ERROR (5)
        • 세미나 | 교육 (10)
        • 자격증 (1)
        • 일상 (2)
        • 2021 (2)
  • 인기 글

  • 태그

    spring
    자동화
    계산기
    알고리즘
    Java
    자바
    PyQt5
    연습문제
    VUE
    자료구조
    명품자바에센셜
    코딩테스트
    스윙
    생능출판
    PyQt
    백준
    jsp
    vue.js
    이클립스
    RPA
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
min_sol
[React] React.memo() : 리렌더링 방지 방법
상단으로

티스토리툴바