React의 useState 후크는 기능적 구성 요소의 상태를 관리하기 위한 기본 도구입니다. 많은 개발자가 기본 사용법에 익숙하지만 useState 내의 콜백 패턴은 간과되는 경우가 많지만 놀라울 정도로 강력합니다. 이 게시물에서는 실제 예제와 함께 useState와 함께 콜백 함수를 사용하는 시기와 이유를 살펴보겠습니다.
콜백에 대해 자세히 알아보기 전에 useState가 일반적으로 작동하는 방식을 빠르게 새로 고치겠습니다.
const [count, setCount] = useState(0); // Later in your component... setCount(count + 1);
이전 값을 기반으로 상태를 업데이트할 때 콜백 패턴이 중요해집니다. 다음과 같은 글을 쓰고 싶을 수도 있습니다.
const [count, setCount] = useState(0); // ? This might not work as expected const handleMultipleIncrements = () => { setCount(count + 1); setCount(count + 1); setCount(count + 1); };
이 코드는 예상한 대로 개수를 3씩 증가시키지 않습니다. React의 상태 일괄 처리로 인해 이러한 모든 업데이트는 동일한 원래 count 값을 기반으로 합니다.
콜백 함수의 장점은 다음과 같습니다.
const handleMultipleIncrements = () => { setCount(prevCount => prevCount + 1); setCount(prevCount => prevCount + 1); setCount(prevCount => prevCount + 1); };
이제 각 업데이트는 이전 상태를 기반으로 하므로 모든 증분이 올바르게 적용됩니다.
장바구니 관리의 실제 예를 살펴보겠습니다.
function ShoppingCart() { const [items, setItems] = useState([]); const addItem = (product) => { setItems(prevItems => { // Check if item already exists const existingItem = prevItems.find(item => item.id === product.id); if (existingItem) { // Update quantity of existing item return prevItems.map(item => item.id === product.id ? { ...item, quantity: item.quantity + 1 } : item ); } // Add new item return [...prevItems, { ...product, quantity: 1 }]; }); }; // ... rest of the component }
// ✅ Good setItems(prev => [...prev, newItem]); // ? Bad - Don't mutate previous state setItems(prev => { prev.push(newItem); // Mutating state directly return prev; });
const [items, setItems] = useState<CartItem[]>([]); setItems((prev: CartItem[]) => [...prev, newItem]);
콜백이 정교한 상태 업데이트를 처리하는 방법을 보여주는 더 복잡한 예는 다음과 같습니다.
function TaskManager() { const [tasks, setTasks] = useState([]); const completeTask = (taskId) => { setTasks(prevTasks => prevTasks.map(task => task.id === taskId ? { ...task, status: 'completed', completedAt: new Date().toISOString() } : task )); }; const addSubtask = (taskId, subtask) => { setTasks(prevTasks => prevTasks.map(task => task.id === taskId ? { ...task, subtasks: [...(task.subtasks || []), subtask] } : task )); }; }
React의 안정적인 상태 업데이트를 위해서는 useState와 함께 콜백 함수를 사용하는 것이 필수적입니다. 경합 상태를 방지하고, 상태 업데이트가 최신 값을 기반으로 하도록 하며, 코드를 더욱 예측 가능하게 만드는 데 도움이 됩니다. 처음에는 구문이 더 장황해 보일 수 있지만 안정성과 유지 관리 측면에서 이점은 그만한 가치가 있습니다.
기억하세요: 새 상태가 어떤 식으로든 이전 상태에 따라 달라지는 경우 콜백 패턴을 찾으세요. 미래의 당신(그리고 당신의 팀)은 감사할 것입니다!
질문이나 의견이 있으신가요? 아래에 연락하시거나 댓글을 남겨주세요!
위 내용은 콜백 함수를 사용한 React의 useState 이해: 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!