Heim >Web-Frontend >js-Tutorial >Grundlegende React-Tricks, die jeder Entwickler kennen muss
React ist unglaublich leistungsfähig, aber um es zu beherrschen, muss man über die Grundlagen hinausgehen und einige weniger bekannte Tricks lernen, um die Entwicklung zu optimieren. Hier ist ein Überblick über meine persönlichen 20 Lieblings-React-Tricks, die Ihre Produktivität steigern und Ihnen helfen können, saubereren und effektiveren Code zu schreiben. Lassen Sie uns direkt in die Beispiele eintauchen!
Vermeiden Sie ausführliche if-Anweisungen für die bedingte Darstellung mit Kurzschlussauswertung.
{isLoading && <Spinner />}
Dadurch wird der
Die Klassennamenbibliothek erleichtert die bedingte Anwendung von Klassen.
npm install classnames
import classNames from 'classnames'; const buttonClass = classNames({ 'btn': true, 'btn-primary': isPrimary, 'btn-secondary': !isPrimary, }); <button className={buttonClass}>Click Me</button>
Wenn eine Berechnung kostspielig ist, merken Sie sie sich, damit React sie nicht unnötig neu berechnet.
const sortedData = useMemo(() => data.sort(), [data]);
Dadurch wird sortiertData nur dann neu berechnet, wenn sich Daten ändern.
Vermeiden Sie ständige Neu-Renderings, indem Sie Eingabeänderungen entprellen.
const [value, setValue] = useState(''); const [debouncedValue, setDebouncedValue] = useState(''); useEffect(() => { const handler = setTimeout(() => setDebouncedValue(value), 500); return () => clearTimeout(handler); }, [value]); <input value={value} onChange={(e) => setValue(e.target.value)} />
Kapseln Sie die Logik in einem benutzerdefinierten Hook, um sie komponentenübergreifend wiederzuverwenden.
function useFetch(url) { const [data, setData] = useState(null); useEffect(() => { fetch(url).then(res => res.json()).then(setData); }, [url]); return data; } const Component = () => { const data = useFetch('/api/data'); return <div>{data ? JSON.stringify(data) : 'Loading...'}</div>; };
Optimieren Sie die Ladezeit, indem Sie Ihre Komponenten aufteilen.
const LazyComponent = React.lazy(() => import('./LazyComponent')); function App() { return ( <React.Suspense fallback={<div>Loading...</div>}> <LazyComponent /> </React.Suspense> ); }
Um auf frühere Zustandswerte zuzugreifen, verwenden Sie useRef.
const [count, setCount] = useState(0); const prevCount = useRef(count); useEffect(() => { prevCount.current = count; }, [count]); console.log(`Previous: ${prevCount.current}, Current: ${count}`);
Wenn eine Funktion nicht geändert werden muss, merken Sie sie sich mit useCallback.
const increment = useCallback(() => setCount(count + 1), [count]);
Requisiten direkt in den Funktionsparametern zerstören.
const User = ({ name, age }) => ( <div>{name} is {age} years old</div> );
Elemente umschließen, ohne einen zusätzlichen DOM-Knoten hinzuzufügen.
<> <p>Paragraph 1</p> <p>Paragraph 2</p> </>
Fehler in untergeordneten Komponenten abfangen, um zu verhindern, dass die gesamte App abstürzt.
class ErrorBoundary extends React.Component { state = { hasError: false }; static getDerivedStateFromError() { return { hasError: true }; } render() { if (this.state.hasError) return <h1>Something went wrong.</h1>; return this.props.children; } }
Erkennen Sie Fehler frühzeitig, indem Sie Requisitentypen definieren.
{isLoading && <Spinner />}
Für komplexe Zustandslogik kann useReducer effizienter sein.
npm install classnames
Führen Sie Effekte nach DOM-Updates, aber vor dem Malen aus.
import classNames from 'classnames'; const buttonClass = classNames({ 'btn': true, 'btn-primary': isPrimary, 'btn-secondary': !isPrimary, }); <button className={buttonClass}>Click Me</button>
Erstellen Sie einen globalen Zustand ohne Bohren von Propellern.
const sortedData = useMemo(() => data.sort(), [data]);
Das Definieren von Funktionen inline führt zu einem erneuten Rendern. Definieren Sie sie stattdessen außerhalb.
const [value, setValue] = useState(''); const [debouncedValue, setDebouncedValue] = useState(''); useEffect(() => { const handler = setTimeout(() => setDebouncedValue(value), 500); return () => clearTimeout(handler); }, [value]); <input value={value} onChange={(e) => setValue(e.target.value)} />
Null- oder undefinierte Werte ordnungsgemäß behandeln.
function useFetch(url) { const [data, setData] = useState(null); useEffect(() => { fetch(url).then(res => res.json()).then(setData); }, [url]); return data; } const Component = () => { const data = useFetch('/api/data'); return <div>{data ? JSON.stringify(data) : 'Loading...'}</div>; };
Verwenden Sie beim Rendern von Listen immer eindeutige Schlüssel.
const LazyComponent = React.lazy(() => import('./LazyComponent')); function App() { return ( <React.Suspense fallback={<div>Loading...</div>}> <LazyComponent /> </React.Suspense> ); }
Benannte Exporte erleichtern den Import bestimmter Komponenten.
const [count, setCount] = useState(0); const prevCount = useRef(count); useEffect(() => { prevCount.current = count; }, [count]); console.log(`Previous: ${prevCount.current}, Current: ${count}`);
Dann nach Bedarf importieren:
const increment = useCallback(() => setCount(count + 1), [count]);
Umschließen Sie Komponenten mit HOCs, um zusätzliche Logik hinzuzufügen.
const User = ({ name, age }) => ( <div>{name} is {age} years old</div> );
Wenn Sie diese Tricks beherrschen, können Sie prägnanteren, lesbareren und effizienteren React-Code schreiben! Viel Spaß beim Codieren!
Das obige ist der detaillierte Inhalt vonGrundlegende React-Tricks, die jeder Entwickler kennen muss. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!