React 코드를 리팩토링하는 것은 혼란스러운 주방을 잘 정돈된 요리의 천국으로 바꾸는 것과 같습니다. 기능을 변경하지 않고 앱의 구조, 유지 관리성 및 성능을 개선하는 것입니다. 비대해진 구성요소나 복잡한 상태 로직과 싸우고 있다면 잘 계획된 리팩터링을 통해 코드베이스를 매끄럽고 효율적인 머신으로 변환할 수 있습니다.
이 블로그에서는 일반적인 리팩토링 시나리오를 살펴보고 실행 가능한 솔루션을 제공하며 React 앱의 진정한 잠재력을 발휘할 수 있도록 지원합니다.
리팩토링은 기능을 변경하지 않고도 코드 구조를 개선합니다. 버그를 수정하거나 기능을 추가하는 것이 아니라 인간과 기계 모두에게 더 나은 코드를 만드는 것입니다.
? 프로 팁: 성급한 최적화를 피하세요. 개발자 경험을 개선하거나 느린 렌더링 문제를 해결하는 등 명확한 요구 사항이 있는 경우 리팩터링하세요.
코드 냄새는 비효율성이나 복잡성을 나타내는 미묘한 신호입니다. 오류는 아니지만 개선이 필요한 부분을 나타냅니다.
function ProductPage() { const [data, setData] = useState([]); useEffect(() => fetchData(), []); const handleAddToCart = () => { ... }; return ( <div> {data.map(item => <ProductItem key={item.id} item={item} />)} <button onClick={handleAddToCart}>Add to Cart</button> </div> ); }
function ProductPage() { return ( <div> <ProductList /> <CartButton /> </div> ); } function ProductList() { const [data, setData] = useState([]); useEffect(() => fetchData(), []); return data.map(item => <ProductItem key={item.id} item={item} />); } function CartButton() { const handleAddToCart = () => { ... }; return <button onClick={handleAddToCart}>Add to Cart</button>; }
<App> <ProductList product={product} /> </App>
<ProductList> <ProductItem product={product} /> </ProductList>
const ProductContext = React.createContext(); function App() { const [product, setProduct] = useState({ id: 1, name: 'Example Product' }); // Example state return ( <ProductContext.Provider value={product}> <ProductList /> </ProductContext.Provider> ); } function ProductList() { const product = useContext(ProductContext); return <ProductItem product={product} />; }
return condition1 ? a : condition2 ? b : condition3 ? c : d;
function renderContent(condition) { switch (condition) { case 1: return a; case 2: return b; case 3: return c; default: return d; } } return renderContent(condition);
function calculateTotal(cart) { return cart.reduce((total, item) => total + item.price, 0); }
function calculateTotalPrice(cart) { return cart.reduce((total, item) => total + item.price, 0); } function useTotalPrice(cart) { return useMemo(() => calculateTotalPrice(cart), [cart]); }
const [isLoggedIn, setIsLoggedIn] = useState(user !== null);
const isLoggedIn = !!user; // Converts 'user' to boolean
상태 관리는 필수적이지만 금방 혼란스러워질 수 있습니다. 단순화하는 방법은 다음과 같습니다.
const [cartItems, setCartItems] = useState([]); const totalPrice = cartItems.reduce((total, item) => total + item.price, 0);
const initialState = { count: 0 }; function reducer(state, action) { switch (action.type) { case 'increment': return { count: state.count + 1 }; default: return state; } } const [state, dispatch] = useReducer(reducer, initialState);
// Before: function App() { const [filter, setFilter] = useState(''); return <ProductList filter={filter} onFilterChange={setFilter} />; } // After: function ProductList() { const [filter, setFilter] = useState(''); return <FilterInput value={filter} onChange={setFilter} />; }
구성요소는 한 가지 일을 잘 수행해야 합니다. 예:
function MemberCard({ member }) { return ( <div> <Summary member={member} /> <SeeMore details={member.details} /> </div> ); }
프로파일러를 사용하여 병목 현상을 식별하세요. 개발자 도구의 "프로파일러"에서 액세스하세요.
비용이 많이 드는 계산 최적화:
function ProductPage() { const [data, setData] = useState([]); useEffect(() => fetchData(), []); const handleAddToCart = () => { ... }; return ( <div> {data.map(item => <ProductItem key={item.id} item={item} />)} <button onClick={handleAddToCart}>Add to Cart</button> </div> ); }
참고: 자주 업데이트되는 종속성 때문에 메모 기능을 과도하게 사용하지 마세요.
사용자 중심 테스트 작성:
function ProductPage() { return ( <div> <ProductList /> <CartButton /> </div> ); } function ProductList() { const [data, setData] = useState([]); useEffect(() => fetchData(), []); return data.map(item => <ProductItem key={item.id} item={item} />); } function CartButton() { const handleAddToCart = () => { ... }; return <button onClick={handleAddToCart}>Add to Cart</button>; }
<App> <ProductList product={product} /> </App>
<ProductList> <ProductItem product={product} /> </ProductList>
Category | Tip |
---|---|
Code Smells | Split bloated components; avoid prop drilling. |
State Management | Use derived state; colocate state. |
Performance | Use Profiler; optimize Context values. |
Testing | Test behavior, not implementation details. |
위 내용은 리팩토링 React: 한 번에 하나의 구성요소로 혼돈 길들이기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!