-
React Hooks : useMemo() 함수 *컴포넌트 성능 최적화Study/React 2020. 1. 8. 11:26반응형
컴포넌트가 업데이트 되고 렌더링 될 때, 업데이트가 필요없는 불필요한 컴포넌트까지 같이 리렌더링 되는 경우가 있다.
이런 경우 성능이 떨어지게 되는데, 이를 방지하기 위해 사용하는 것이 바로 useMemo Hook 이다.
useMemo 함수는 연산된 값을 렌더링 시 재사용할 때 쓰인다.
useMemo 사용법
기본 형태 :
useMemo( function, deps )
- function : 어떻게 연산할 지 정의하는 함수
- deps : 검사할 특정 값을 담은 배열
(배열 안의 값이 바뀌면 함수를 호출해서 연산하고, 값이 바뀌지 않으면 이전에 연산한 값을 재사용한다.)
import React, { useRef, useState, useEffect, useMemo} from 'react'; import UserList from './UserList'; import CreateUser from './CreateUser'; function countActiveUsers(users) { console.log('활성 사용자 수를 세는중...'); return users.filter(user => user.active).length; } function App() { //코드 생략 const [users, setUsers] = useState([ { id: 1, username: 'subin', email: 'subin@example.com', active: true }, //코드 생략 ]); //코드 생략 const count = useMemo(() => countActiveUsers(users), [users]); return ( <> //코드 생략 <div>활성사용자 수 : {count}</div> </> ); } export default App;
import React, { useRef, useState, useMemo } from 'react';
: useMemo 함수를 불러온다.
function countActiveUsers(users) {
console.log('활성 사용자 수를 세는중...');
return users.filter(user => user.active).length; }
: 연산에 필요한 함수를 구현한다.
active가 true인 user 들만 필터링하여 users 배열의 길이를 리턴한다.
const count = useMemo(() => countActiveUsers(users), [users]);
: 변수를 하나 설정하고 useMemo함수를 작성한다.
첫 번째 파라미터로는 users를 인자로 받는 countActiveUsers 함수를 호출하고,
두 번째 파라미터로는 deps에 users 배열을 넣어준다.
<div>활성사용자 수 : {count}</div>
: 렌더링 할 때 변수를 활용하여 보여준다.
**
만약 위 코드에서 useMemo 함수를 사용하지 않는다면
input에 값을 입력할 때도 불필요하게 countActiveUsers가 실행되어 리렌더링 될 것이다.
반응형'Study > React' 카테고리의 다른 글
React.memo *컴포넌트 성능 최적화 (0) 2020.01.09 React Hooks : useCallback() 함수 *컴포넌트 성능 최적화 (0) 2020.01.09 React Array CRUD : 배열 렌더링+추가+제거+수정 (2) 2020.01.07 React Hooks : useEffect() 함수 (2) 2020.01.06 React Hooks : useRef() 함수 (6) 2020.01.05