ריאקט מבט לעתיד - פעולות צד לקוח
אחד הדברים המעייפים בריאקט תמיד היה החיבור בטופס בין State לתוכן של רכיבי הקלט. אינספור ספריות נכתבו כדי לעבוד טוב יותר עם טפסים, ואינספור מתכנתים ומתכנתות התגעגעו לאיזה ng-model
שיחסוך לנו את כאב הראש.
ובדיוק כשכמעט איבדנו תקווה הגיעו דן אברמוב וצוות החברים עם פיצ׳ר חדש שאולי קצת יעזור לחסוך חלק מעבודת החיבור של הטפסים - וזהו Client Side Form Actions. זה עובד ככה:
אפשר יהיה להגדיר לאלמנט form מאפיין action שיהיה פונקציה אסינכרונית.
פונקציה זו תופעל כשמישהו ינסה להגיש את התוכן, ותוכל לעדכן State.
אם הפונקציה זורקת שגיאה השגיאה תיחשב כשגיאת render ותיתפס ב Error Boundary הקרוב.
קוד? בטח הנה הדוגמה:
import { useState } from "react";
export default function Todo() {
const [name, setName] = useState([]);
async function copy(formData) {
console.log(formData);
setName(formData.get("name"));
}
return (
<>
<form action={copy}>
<label>
Type your name:
<input name="name" />
</label>
<button type="submit">submit</button>
</form>
<p>Hello {name}</p>
</>
);
}
כשלוחצים submit מופעלת הפונקציה שמעדכנת את משתנה הסטייט. הפונקציה מקבלת את כל המידע מהטופס אוטומטית דרך הפריימוורק וכך לא צריך לחבר בין סטייט למידע שיש בקלטים.
הקוד דורש את גירסה 18.3 של ריאקט שעדיין לא יצאה, אבל אפשר לראות גירסה עובדת שלו עם גירסת הפיתוח שלהם כאן: https://codesandbox.io/s/vibrant-glade-dhrfz7?file=/src/App.js.
למרות שזה נראה פיצ'ר קצת מיותר, אני חושב שמהר מאוד הוא יהפוך לפינוק קטן שכולם משתמשים בו - גם ביישומים קטנים וגם בשילוב עם רידאקס או פריימוורקים גדולים יותר, כי הוא פשוט חוסך חלק מה Boilerplate שכולנו כתבנו כל הזמן.