Heim >Web-Frontend >js-Tutorial >Refactoring React: Das Chaos zähmen, eine Komponente nach der anderen
Refactoring von React-Code ist, als würde man eine chaotische Küche in einen gut organisierten kulinarischen Zufluchtsort verwandeln. Es geht darum, die Struktur, Wartbarkeit und Leistung Ihrer App zu verbessern, ohne deren Funktionalität zu ändern. Egal, ob Sie mit aufgeblähten Komponenten oder einer verworrenen Zustandslogik zu kämpfen haben, ein gut geplanter Refactor verwandelt Ihre Codebasis in eine schlanke, effiziente Maschine.
Dieser Blog deckt gängige Refactoring-Szenarien auf, bietet umsetzbare Lösungen und versetzt Sie in die Lage, das wahre Potenzial Ihrer React-App auszuschöpfen.
Refactoring verbessert die Struktur Ihres Codes, ohne seine Funktionalität zu ändern. Es geht nicht darum, Fehler zu beheben oder Funktionen hinzuzufügen – es geht darum, Ihren Code für Menschen und Maschinen gleichermaßen zu verbessern.
? Profi-Tipp: Vermeiden Sie vorzeitige Optimierung. Refaktorieren Sie, wenn ein klarer Bedarf besteht, z. B. zur Verbesserung der Entwicklererfahrung oder zur Behebung langsamer Renderings.
Code-Gerüche sind subtile Signale für Ineffizienz oder Komplexität. Es handelt sich nicht um Fehler, aber sie weisen auf Bereiche hin, die verbessert werden müssen.
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
Staatsmanagement ist wichtig, kann aber schnell chaotisch werden. So vereinfachen Sie es:
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} />; }
Komponenten sollten eine Aufgabe erfüllen und zwar gut. Zum Beispiel:
function MemberCard({ member }) { return ( <div> <Summary member={member} /> <SeeMore details={member.details} /> </div> ); }
Verwenden Sie den Profiler, um Engpässe zu identifizieren. Greifen Sie in den Entwicklertools unter „Profiler“ darauf zu.
Kostenintensive Berechnungen optimieren:
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> ); }
Hinweis: Vermeiden Sie übermäßiges Auswendiglernen für häufig aktualisierte Abhängigkeiten.
Benutzerzentrierte Tests schreiben:
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. |
Das obige ist der detaillierte Inhalt vonRefactoring React: Das Chaos zähmen, eine Komponente nach der anderen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!