You Are Using useState Wrong (and how to fix it)
useState를 잘못 사용하면 컴포넌트가 비대해지고, 이해 및 유지보수가 어려워지며, 불필요한 리렌더링으로 인해 성능 문제가 발생할 수 있습니다. 🧱
- 특히, 여러 개의 독립적인
useState 변수들이 한 컴포넌트에 모여 '상태의 벽(wall of state)'을 형성하고, 이들이 useEffect와 결합하여 연쇄적인 리렌더링을 유발하는 것이 주된 문제입니다. 💥
- 해결책으로, 첫 번째는 관련 없는 상태들을 분리하여 각각의 독립적인 컴포넌트로 나누는 것입니다. 이는 리렌더링 범위를 제한하고 코드의 모듈성을 높여 유지보수를 용이하게 합니다. 🧩
- 두 번째는 모든 변수에
useState를 사용할 필요 없이, 기존 상태나 props로부터 파생될 수 있는 값들은 렌더링 시점에 직접 계산하여 사용하는 것입니다. (예: displayName, isFormValid) 💡
- 파생된 값의 계산이 비용이 많이 드는 경우(예: 큰 배열 필터링)에는
useMemo를 사용하여 불필요한 재계산을 방지할 수 있습니다. (React 컴파일러 사용 시 자동 처리) 🚀
useEffect를 사용하여 다른 상태를 업데이트하는 대신, 해당 로직을 handleSubmit과 같은 이벤트 핸들러 내부로 옮겨 직접적인 사용자 액션에 반응하도록 변경하면 연쇄적인 리렌더링을 줄일 수 있습니다. 🔄
- 복잡하고 상호 연관된 상태 관리가 필요한 경우, 여러
useState 대신 useReducer 훅을 사용하여 상태 로직을 중앙 집중화하고 예측 가능한 방식으로 업데이트하는 것이 효과적입니다. 🧠
- 궁극적으로, 컴포넌트는 단일 책임을 가지도록 단순하게 유지하고, 불필요한 상태와
useEffect 사용을 최소화하여 성능과 가독성을 향상시키는 것이 중요합니다. ✅