Heim > Artikel > Web-Frontend > Das Biest zähmen: Wie ich eine Messy-React-Komponente umgestaltet habe
Das haben wir alle schon erlebt. Sie öffnen eine React-Komponente, die Sie vor ein paar Monaten geschrieben haben, und es kommt Ihnen so vor, als würden Sie sich Code ansehen, der von jemandem geschrieben wurde, der es eilig hatte – was wahrscheinlich der Fall war. Die Fristen rückten näher und Funktionen mussten geliefert werden. Spulen wir heute vor und es ist Zeit, diese chaotische Komponente umzugestalten.
Also, hier ist, wie ich es angegangen bin.
Das erste, was mir auffiel, war, dass das Bauteil viel zu groß geworden war. Es wurde versucht, alles zu tun, wie den Status zu verwalten, API-Aufrufe durchzuführen, komplexe UI-Logik zu verwalten und sogar Stile direkt anzuwenden. Es handelte sich um eine einzelne Datei mit über 540 Zeilen, und beim Durchlesen fühlte es sich an, als stünde man in einem Dschungel ohne Karte.
Der erste Schritt bestand darin, die Realität zu akzeptieren: Dieser Code war nicht mehr wartbar. Wenn ich, die Person, die es geschrieben hat, dem Geschehen kaum folgen könnte, hätte jemand anderes keine Chance. Also beschloss ich, es aufzuschlüsseln.
Ich begann damit, die unterschiedlichen Verantwortlichkeiten der Komponente zu identifizieren. Es gab drei klare Bereiche:
Statusverwaltung: Die Handhabung des Komponentenstatus war mit der UI-Logik verknüpft.
API-Aufrufe: Daten abrufen und Ladezustände verarbeiten.
Rendering-Benutzeroberfläche: Anzeige der Daten in einer etwas komplexen UI-Struktur.
Jede dieser Verantwortlichkeiten musste getrennt werden.
Das erste, was ich tat, war, die Statusverwaltung und die API-Logik in benutzerdefinierte Hooks zu extrahieren. Dadurch wurde nicht nur die Komponente bereinigt, sondern es wurde auch einfacher, die Logik an anderer Stelle zu testen und wiederzuverwenden.
Hier wird ein Code erwähnt (nicht der Originalcode):
function useDataFetching(apiEndpoint) { const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { async function fetchData() { try { let response = await fetch(apiEndpoint); let result = await response.json(); setData(result); } catch (err) { setError(err); } finally { setLoading(false); } } fetchData(); }, [apiEndpoint]); return { data, loading, error }; }
Mit useDataFetching habe ich die API-Aufruflogik herausgezogen und die Lade- und Fehlerzustände verarbeitet. Jetzt muss die Komponente nur noch diesen Hook aufrufen und erhält die erforderlichen Daten, sauber und einfach.
Vereinfachung der UI-Logik
Als nächstes habe ich mir die Rendering-Logik angesehen. Zuvor habe ich die Renderfunktion auf Ladevorgänge, Fehler und Daten überprüft, was es ziemlich schwierig machte, ihnen zu folgen. Ich habe diese Logik in kleine, in sich geschlossene Funktionen aufgeteilt, etwa so (natürlich nicht das Original ;)
function renderLoading() { return <p>Loading...</p>; } function renderError(error) { return <p>Error: {error.message}</p>; } function renderData(data) { return <div>{/* Complex UI logic here */}</div>; } //After that, component is ni much pretty shape function MyComponent() { const { data, loading, error } = useDataFetching('/api/data-endpoint'); if (loading) return renderLoading(); if (error) return renderError(error); if (data) return renderData(data); return null; }
Nachdem die Komponente zerlegt wurde, wuchs die Datei von über 540 Zeilen auf knapp 124 an, mit einer Logik, die viel einfacher zu befolgen ist. Die Komponente macht jetzt eines: die Benutzeroberfläche rendern. Alles andere wurde auf benutzerdefinierte Hooks und Dienstprogrammfunktionen verlagert.
Diese Erfahrung hat für mich einige wichtige Lektionen bestätigt:
Keine Angst vor Refactoring: Es ist leicht, unordentlichen Code so zu belassen, wie er ist, insbesondere wenn er funktioniert. Aber wenn Sie sich die Zeit nehmen, alles aufzuräumen, wird Ihr Leben – und das Ihres zukünftigen Ichs – so viel einfacher.
Trennung von Belangen: Durch die Beibehaltung unterschiedlicher Belange an verschiedenen Stellen (Status, API, UI) wurde der Code modularer, wiederverwendbarer und testbarer.
Halten Sie es einfach: Durch die Vereinfachung der Renderfunktion durch Auslagern der Logik auf kleinere Funktionen wurde die Komponente viel lesbarer.
Wenn Sie also eine unordentliche Komponente herumliegen haben, zögern Sie nicht, sie umzugestalten. Es geht nicht nur um sauberen Code – es geht darum, Ihnen das Leben als Entwickler zu erleichtern. Und wer möchte das nicht?
Das obige ist der detaillierte Inhalt vonDas Biest zähmen: Wie ich eine Messy-React-Komponente umgestaltet habe. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!