useCallback으로 이전에 만들었던 함수 재사용 하기
컴포넌트가 리렌더링 될때마다 새로운 함수를 계속 만들고 있는 문제
-> 함수를 새로 만드는 것은 메모리도 cpu도 많이 차지하지는 않기 때문에 그 자체만으로 부하가 걸리진 않는다.
그럼에도 한번 만든 함수를 재사용할 수 있다면 재사용 하는게 좋다.
사용법
const onChange = useCallback(
e => {
const { name, value } = e.target;
setInputs({
...inputs,
[name]: value
});
},
[inputs]
);
이렇게 useCallback으로 감싸준다
그러면 deps에 넣은 값이 바뀔때만 함수가 새로 만들어진다.
여기서는 inputs가 바뀔때만 함수가 새로 만들어진다.
이렇게만 해놓는다고 해서 최적화가 이루어지지는 않는다.
구글에서 react dev tools를 설치한다.
이 확장 프로그램을 사용하면 렌더링 되는 컴포넌트를 확인할 수 있다.
React.memo를 사용하여 불필요한 컴포넌트 리렌더링 방지
사용법
export default React.memo(CreateUser);
컴포넌트를 export할때 React.memo로 감싸주면
props가 바뀌었을때만 리렌더링 된다.
const User = React.memo(function User({ user, onRemove, onToggle }) {
return (
<div>
<b
style={{
cursor: 'pointer',
color: user.active ? 'green' : 'black'
}}
onClick={() => onToggle(user.id)}
>
{user.username}
</b>
<span>({user.email})</span>
<button onClick={() => onRemove(user.id)}>삭제</button>
</div>
);
});
이렇게 함수자체를 React.memo로 감싸줄 수도 있다 .
참고: 벨로퍼트
728x90
'WEB > REACT' 카테고리의 다른 글
[REACT] react transition group /리액트 라우터에 애니메이션 주기, 슬라이드 애니메이션, 특정 페이지에만 라우트 애니메이션 (0) | 2021.08.21 |
---|---|
[REACT] useReducer로 상태 업데이트 컴포넌트 외부에서 사용하기 (0) | 2021.07.31 |
[React] useMemo 를 사용하여 연산한 값 재사용하기/ 검색기능에 적용(ing) (0) | 2021.07.21 |
[React] useEffect를 사용하기 / 마운트, 언마운트, 업데이트 (0) | 2021.07.21 |
[React] 배열에서 원소 삭제하기 filter (0) | 2021.07.21 |