※ 강의를 듣고 제가 이해한 내용을 바탕으로 정리한 것이라서 오류가 있을 수 있습니다.
React.memo 를 사용한 컴포넌트 리렌더링 방지 하기
CreateUser.js
import React from 'react';
function CreateUser({ username, email, onChange, onCreate }) {
return (
<div>
<input
name="username"
placeholder="계정명"
onChange={onChange}
value={username}
/>
<input
name="email"
placeholder="이메일"
onChange={onChange}
value={email}
/>
<button onClick={onCreate}>등록</button>
</div>
);
}
export default React.memo(CreateUser); // React.Memo를 이 부분에 사용해주면 된다.
위 코드와 같이 React.Memo를 컴포넌트를 내보내주는 곳에 사용해주면 된다.
App.js
import React, {useRef, useState, useMemo, useCallback} from 'react';
import UserList from './components/UserList';
import CreateUser from './components/CreateUser';
function countActiveUsers (users) {
console.log('활성 사용자 수를 세는중...');
return users.filter(user => user.active).length;
}
function App() {
const [inputs, setInputs] = useState({
username: '',
email: '',
});
const {username, email} = inputs;
const onChange = useCallback (e => {
const {name, value} = e.target;
setInputs({
...inputs,
[name]: value
});
}, [inputs]);
const [users, setUsers] = useState([
{
id: 1,
username: 'progaramexplorer',
email: 'progaramexplorer@naver.com',
active: true
},
{
id: 2,
username: 'tester',
email: 'tester@gmail.com',
active: false
},
{
id: 3,
username: 'liz',
email: 'liz@daum.net',
active: false
}
]);
const nextId = useRef(4);
const onCreate = useCallback(() => {
const user = {
id: nextId.current,
username,
email,
};
setUsers(user => users.concat(user));
setInputs({
username: '',
email: ''
});
nextId.current += 1;
}, [username, email]); // deps 배열에 users를 없애주면 된다.
위 코드와 같이 콜백 함수의 deps 배열에 users를 없애주면 최적화가 끝이 난다.
'개발 공부한 내용 정리 > React' 카테고리의 다른 글
React- 클래스형 컴포넌트 선언 (0) | 2020.09.29 |
---|---|
React- 커스텀 HOOK 만들기 (0) | 2020.09.27 |
React- useCallback을 사용하여 함수 재사용 하기 (0) | 2020.09.24 |
React- useMemo 를 사용하여 연산한 값 재사용하기 (0) | 2020.09.12 |
React- useEffect를 사용하여 마운트/언마운트/업데이트시 할 작업 설정하기 (0) | 2020.09.11 |