reagieren 19 führt mehrere leistungsstarke neue Hooks ein, die revolutionieren, wie wir mit Formularen umgehen und optimistische Updates in unseren Anwendungen verwalten. In diesem Blog werden wir UseFormStatus, UseactionState und Useoptimistic untersuchen - drei Haken, die unsere React -Anwendungen reaktionsschneller und benutzerfreundlicher machen.
Der UseFormStatus-Hook enthält Echtzeitinformationen zu Formulareinreichungen und erleichtert es, reaktionsschnelle und zugängliche Formulare zu erstellen. Lassen Sie uns untersuchen, wie sich dieser Haken verbessert.
Beispiel 1: Grundladungszustand grundlegender Formularfunction SubmitButton() { const { pending } = useFormStatus(); return ( ); } function SignupForm() { return (); } In React 18 müssten Sie die Ladezustände mit Usestate manuell verwalten. Der neue UseFormStatus -Hook behandelt dies automatisch und reduziert den Code des Boilerplate.
Beispiel 2: Mehrere Formzustände
function SubmitButton() { const { pending } = useFormStatus(); return ( ); } function SignupForm() { return (); } Beispiel 3: Formular Validierungsstatus
{error}
))}function SubmitButton() { const { pending } = useFormStatus(); return ( ); } function SignupForm() { return (); } Beispiel 4: Multi-Step-Form-Fortschritt
Beispiel 5: Datei -Upload -FortschrittFunktion uploadProgress () { const {ausstehend, progress} = useFormStatus (); zurückkehren (
{anstehend && progresh && (UsactionState: Aktionsergebnisse verwalten); }Der UseActionState -Hook bietet eine Möglichkeit, den Status von Formaktionen und Servermutationen zu verfolgen, wodurch es einfacher ist, Erfolg und Fehlerzustände zu behandeln.
Beispiel 1: Grundlegende Aktionszustand
function SubmissionStatus () { const state = useActionState (); zurückkehren (
{state.status === 'Erfolg' &&); } Funktion commentform () { zurückkehren (Einreichung erfolgreich!
} {state.status === 'Fehler' &&Fehler: {state.error.message}
}function SubmitButton() { const { pending } = useFormStatus(); return ( ); } function SignupForm() { return (); } Beispiel 2: Aktionsgeschichtefunction actionHistory () { const state = useActionState (); zurückkehren (
); }Aktuelle Aktionen
{state.history.map ((Aktion, Index) => (
- {action.type} - {action.timestamp} {action.status === 'Fehler' && `(fehlgeschlagen: $ {action.Error.message})`}
))}function SubmitButton() { const { pending } = useFormStatus(); return ( ); } function SignupForm() { return (); } Beispiel 3: Mechanismus wiederholenfunction retryableAction () { const state = useActionState (); zurückkehren (
{state.status === 'error' && (); }state.retry ()} deaktiviert = {state.retrying} > {State.retrying? "Wiederholung ...": "Wiederholung"} )} function SubmitButton() { const { pending } = useFormStatus(); return ( ); } function SignupForm() { return (); } Beispiel 4: Aktionswarteschlangefunction actionqueue () { const state = useActionState (); zurückkehren (
); }Ausstehende Aktionen
{state.queue.map ((Aktion, Index) => ({action.type} - Warteschlange bei {action.queedat}.))}function SubmitButton() { const { pending } = useFormStatus(); return ( ); } function SignupForm() { return (); } Beispiel 5: Aktionsstatistikfunction actionStats () { const state = useActionState (); zurückkehren (
); }Aktionsstatistik
Erfolgsrate: {State.Stats.SuccessRate}%
Durchschnittliche Dauer: {State.Stats.AvgDuration} ms
Gesamtaktionen: {state.stats.total}
function SubmitButton() { const { pending } = useFormStatus(); return ( ); } function SignupForm() { return (); } Verwendung optimistisch: reibungslose UI -UpdatesDer Useoptimistische Hook ermöglicht sofortige UI -Updates, während Sie auf Serverantworten warten und eine reaktionsfähigere Benutzererfahrung erstellen.
Beispiel 1: Optimistische Todoliste
Funktion todolist () { const [todos, settodos] = usustate ([]); const [optimistictodos, addoptimistictodo] = useoptimistic ( Todos, (Staat, Newtodo) => [... Zustand, Newtodo] ); asynchrische Funktion addtodo (FormData) { const newtodo = { ID: Datum.Now (), Text: FormData.get ('todo'), Fertig: Falsch }; addoptimistictodo (newtodo); Warten Sie Savetodo (Newtodo); } zurückkehren (
); }{optimistictodos.map (Todo => (
- {Todo.text}
))}function SubmitButton() { const { pending } = useFormStatus(); return ( ); } function SignupForm() { return (); } Beispiel 2: optimistische Schaltfläche wieFunktion wie Button ({postid, initialLikes}) { const [Likes, setlikes] = usustate (initialLikes); const [optimisticlikes, addoptimistisch] = Verwendung optimistisch ( Likes, (Zustand) => Zustand 1 ); asynchrische Funktion handelike () { addoptimistisch (); warte wie post (postid); } zurückkehren ( ); }
function SubmitButton() { const { pending } = useFormStatus(); return ( ); } function SignupForm() { return (); } Beispiel 3: Optimistischer Kommentar -Threadfunction commenthread ({postid}) { const [Kommentare, setCompments] = usustate ([]); const [optimisticMents, addoptimisticMent] = useoptimisticist ( Kommentare, (Staat, NewComent) => [... Staat, NewComent] ); asynchrische Funktion Subschritt (FormData) { const comment = { ID: Datum.Now (), Text: FormData.get ('Kommentar'), Ausstehend: wahr }; addoptimisticMent (Kommentar); Warten Sie SaveComment (postId, Kommentar); } zurückkehren (
{optimisticMents.map (Kommentar => (Beispiel 4: Optimistischer Einkaufswagen); } Beispiel 5: Optimistische Benutzereinstellungenfunction ShoppingCart () { const [cart, setcart] = usustate ([]); const [optimisticCart, updateoptimisticCart] = useoptimistic ( Wagen, (Status, Update) => { const {type, item} = update; Switch (Typ) { Fall 'Add': Rückgabe [... Zustand, Artikel]; Fall 'entfernen': return state.filter (i => id! == item.id); Fall 'Update': return state.map (i => id === it it.id? item: i); Standard: Rückkehrstaat; } } ); Async Function UpdateCart (Typ, Element) { UpdateOptimisticCart ({Typ, Element}); Warten Sie SaveCart ({Typ, Element}); } zurückkehren (
{optimisticcart.map (item => (); }{item.name} - $ {item.price}))}function SubmitButton() { const { pending } = useFormStatus(); return ( ); } function SignupForm() { return (function userSettings () { const [Einstellungen, SetSettings] = Usestate ({}); const [optimisticsettings, Updateoptimisticsetting] = Useoptimistic ( Einstellungen, (Status, Update) => ({{ ...Zustand, [update.key]: update.value }) ); asynchrische Funktion aktualisiert (Schlüssel, Wert) { UpdateOptimisticsetting ({Schlüssel, Wert}); Auseait speichert ({[Schlüssel]: Wert}); } zurückkehren (
); }function SubmitButton() { const { pending } = useFormStatus(); return ( ); } function SignupForm() { return (); } Denken Sie daran, die offizielle React-Dokumentation auf die aktuellsten Informationen und Best Practices zu überprüfen, wenn Sie diese Haken in Ihren Anwendungen verwenden.Happy Coding!
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3