들어가기전
리액트에서는 UI 데이터를 상태값과 속성값으로 관리를 합니다.
단순한 개념들이지만 이 두 개념을 구분해보도록 하겠습니다.
상태값
상태값은 우리가 흔히 쓰는 setState로 관리하는 값이 상태값입니다.
color 변수는 setColor를 통해 상태값이 바뀌게 됩니다.
import React, { useState } from 'react';
import Counter from './Counter';
export default function App() {
const [color, setColor] = useState('red'); // 상태값
function onClick() {
setColor('blue');
}
return (
<button style={{ backgroundColor: color }} onClick={onClick}>
좋아요
</button>
);
}
속성값
속성값은 변하지 않는 불변 변수. 부모컴포넌트가 주는 속성값을 'props' 형태로 전달 받습니다.
import React from 'react';
export default function Title({ title }) {
return <p>{title}</p>;
}
속성값 관리
속성값 관리를 통해 불필요한 렌더링을 방지할 수 있습니다.
예제를 보면 버튼 2개가 있습니다.
[예시 코드]
아래 코드에서는 버튼1을 누르면 count값이 변경되고, count값을 사용하고 있는 <Title />도 렌더링됩니다.
버튼2을 누르면 count2값이 변경되는 것인데, count값을 사용하고 있는 <Title />이 또 렌더링됩니다.
이러한 불필요한 렌더링을 막기 위해 React.memo를 사용합니다.
// Counter.js
import React, { useState } from "react";
import Title from "./Title";
export default function Counter() {
const [count, setCount] = useState({ value: 0 });
const [count2, setCount2] = useState(0);
function onClick1() {
setCount(count + 1);
}
function onClick2() {
setCount2(count2 + 1);
}
return (
<div>
<Title title={`현재 카운트: ${count}`} />
<button onClick={onClick1}>버튼1</button>
<button onClick={onClick2}>버튼2</button>
</div>
);
}
[리팩토링 코드]
React.memo를 적용해 주었습니다.
위와 같이 작성하면 속성값이 변경 될때만 Title.js가 렌더링 됩니다.
// Title.js
import React from 'react';
function Title({ title }) {
return <p>{title}</p>;
}
export default React.memo(Title); //속성값 변경될 때만 렌더링
Check Point
- 상태값과 속성값은 UI를 관리하는 데이터
- 상태값은 setState로 관리되는 변수.
- 속성값은 변하지 않는 불변 변수이자 Props형태로 쓰이는 값.
- 속성값 관리는 React.memo로
Ref
실전리액트프로그래밍
MDN
'프론트엔드 > React' 카테고리의 다른 글
현업에서 바로 적용해보는 프론트엔드 클린코드 (0) | 2021.10.28 |
---|---|
리액트 불변성이란 무엇이고, 왜 지켜야 할까? (2) | 2021.06.24 |
리액트에서 cryptoJS 사용하는 법 (0) | 2021.04.15 |
간단하지만 명료하게 리액트 의존성 배열 정리 (0) | 2020.10.13 |
리액트 함수 컴포넌트 10가지 반환값 (0) | 2020.09.19 |