React
고급 React Hooks 사용을 위한 팁과 요령
Kir93
2024. 2. 5. 13:36
728x90
반응형
React Hooks는 단순히 상태와 생명주기 메서드를 함수형 컴포넌트로 가져오는 것 이상의 강력한 기능을 제공합니다.
여기서는 지난 편에 이어 useCallback, useMemo, useReducer를 더 효과적으로 사용하기 위한 실용적인 예제와 덜 알려진 방법들을 공유하고자 합니다.
1. useCallback과 useMemo, useReducer를 지혜롭게 사용하기
1.1 useCallback 예제: 이벤트 핸들러 최적화
import React, { useState, useCallback } from 'react';
function TodoList({ todos, toggleTodo }) {
// useCallback을 사용하여 불필요한 렌더링 방지
const toggle = useCallback(
(id) => {
toggleTodo(id);
},
[toggleTodo], // toggleTodo가 변경될 때만 함수를 다시 생성
);
return (
<ul>
{todos.map((todo) => (
<li key={todo.id} onClick={() => toggle(todo.id)}>
{todo.text}
</li>
))}
</ul>
);
}
1.2 useMemo 예제: 복잡한 계산 캐싱
import React, { useState, useMemo } from 'react';
function ExpensiveComponent({ value }) {
// useMemo를 사용하여 복잡한 계산 결과 캐싱
const expensiveValue = useMemo(() => {
return computeExpensiveValue(value);
}, [value]); // value가 변경될 때만 계산
return <div>{expensiveValue}</div>;
}
function computeExpensiveValue(value) {
// 복잡한 계산 로직
console.log('Computing expensive value...');
return value * 2; // 예제를 단순화하기 위한 계산
}
1.3 useReducer 예제: 복잡한 상태 로직 관리
import React, { useReducer } from 'react';
const initialState = { count: 0 };
function reducer(state, action) {
switch (action.type) {
case 'increment':
return { count: state.count + 1 };
case 'decrement':
return { count: state.count - 1 };
default:
throw new Error();
}
}
function Counter() {
const [state, dispatch] = useReducer(reducer, initialState);
return (
<>
Count: {state.count}
<button onClick={() => dispatch({ type: 'increment' })}>+</button>
<button onClick={() => dispatch({ type: 'decrement' })}>-</button>
</>
);
}
2. 성능 최적화를 위한 고급 전략
2.1 React.memo를 사용한 컴포넌트 메모이제이션
import React, { memo } from 'react';
const MemoizedComponent = memo(function MyComponent(props) {
// 컴포넌트 로직
return <div>Rendered {props.value}</div>;
});
2.2 커스텀 Hooks 예제: 데이터 가져오기
import { useState, useEffect } from 'react';
function useFetch(url) {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
const fetchData = async () => {
const response = await fetch(url);
const data = await response.json();
setData(data);
setLoading(false);
};
fetchData();
}, [url]);
return { data, loading };
}
useCallback, useMemo, useReducer와 같은 React Hooks는 애플리케이션의 성능 최적화와 코드의 관리를 위한 강력한 도구입니다.
위의 예제들을 통해 이러한 Hooks를 실제 프로젝트에 어떻게 적용할 수 있는지에 대한 아이디어를 얻으셨기를 바랍니다.
효과적인 사용을 통해, 더 빠르고 반응성이 좋으며 유지보수가 용이한 React 애플리케이션을 구축하세요.
반응형