React의 useState에서 피해야 할 4 가지 실수 🚫

소개
React.js는 구성 요소 내에서 상태를 관리하는 고유한 접근 방식을 통해 현대 웹 개발의 초석이 되었습니다. 일반적인 후크 중 하나 useState는 기본이지만 종종 오용됩니다. 이러한 일반적인 실수를 이해하고 피하는 것은 효율적이고 버그 없는 애플리케이션을 만드는 것을 목표로 하는 초보자와 숙련된 개발자 모두에게 중요합니다.
useState이 블로그에서는 React에서 사용할 때 피해야 할 네 가지 중요한 실수에 대해 알아볼 것입니다 . 함께 React 기술을 향상시켜 봅시다!
실수 1: 이전 상태를 고려하는 것을 잊음 😨
React의 useState후크로 작업할 때 흔히 저지르는 실수는 업데이트할 때 가장 최근 상태를 고려하지 않는 것입니다. 이러한 방식은 특히 신속하거나 여러 상태 업데이트를 처리할 때 예기치 않은 동작으로 이어질 수 있습니다.
❌ 문제 이해
React에서 카운터를 구축한다고 가정해 보겠습니다. 당신의 목표는 버튼을 클릭할 때마다 횟수를 늘리는 것입니다. 간단한 접근 방식은 단순히 현재 상태 값에 1을 추가하는 것입니다. 그러나 이는 문제가 될 수 있습니다.
import React, { useState } from 'react';
const CounterComponent = () => {
const [counter, setCounter] = useState(0);
const incrementCounter = () => {
setCounter(counter + 1); // Might not always work as expected
};
return (
<div>
<p>Counter: {counter}</p>
<button onClick={incrementCounter}>Increment</button>
</div>
);
};
export default CounterComponent;
위 코드에서는 incrementCounter현재 값을 기준으로 카운터를 업데이트합니다. 이는 간단해 보이지만 문제가 발생할 수 있습니다. React는 여러 setCounter호출을 일괄적으로 일괄 처리하거나 다른 상태 업데이트가 방해를 받아 counter매번 올바르게 업데이트되지 않을 수 있습니다.
✅ 수정사항:
이 문제를 방지하려면 메서드의 기능적 형식을 사용하세요 setCounter. 이 버전은 React가 가장 최근의 상태 값으로 호출하는 함수를 인수로 사용합니다. 이렇게 하면 항상 최신 상태 값으로 작업할 수 있습니다.
import React, { useState } from 'react';
const CounterComponent = () => {
const [counter, setCounter] = useState(0);
const incrementCounter = () => {
setCounter(prevCounter => prevCounter + 1); // Correctly updates based on the most recent state
};
return (
<div>
<p>Counter: {counter}</p>
<button onClick={incrementCounter}>Increment</button>
</div>
);
};
export default CounterComponent;
이 수정된 코드에서는 incrementCounter함수를 사용하여 상태를 업데이트합니다. 이 함수는 가장 최근 상태( prevCounter)를 수신하고 업데이트된 상태를 반환합니다. 이 접근 방식은 특히 업데이트가 빠르게 또는 연속해서 여러 번 발생할 때 훨씬 더 안정적입니다.
실수 2: 상태 불변성 무시 🧊
❌ 문제 이해
React에서 상태는 불변으로 취급되어야 합니다. 일반적인 실수는 특히 객체 및 배열과 같은 복잡한 데이터 구조의 경우 상태를 직접 변경하는 것입니다.
상태 저장 객체에 대한 다음과 같은 잘못된 접근 방식을 고려해보세요.
import React, { useState } from 'react';
const ProfileComponent = () => {
const [profile, setProfile] = useState({ name: 'John', age: 30 });
const updateAge = () => {
profile.age = 31; // Directly mutating the state
setProfile(profile);
};
return (
<div>
<p>Name: {profile.name}</p>
<p>Age: {profile.age}</p>
<button onClick={updateAge}>Update Age</button>
</div>
);
};
export default ProfileComponent;
이 코드는 profile개체를 직접 잘못 변경합니다. 이러한 변형은 다시 렌더링을 유발하지 않으며 예측할 수 없는 동작으로 이어지지 않습니다.