کتابخانه React Hook Form برای مدیریت فرم در ری اکت ( آموزش و بررسی جامع )
کتابخانه React Hook Form در ری اکت یکی از خفن ترین و بهترین کتابخانه های مدیریت فرم به حساب میاد. تو این مقاله به آموزش React Hook Form میپردازیم و بصورت جامع و تخصصی بررسیش میکنیم 🙂
با فِرانت اِندی همراه باشید …
قضیه چیه ؟!
اکثر اپیکیشن های تحت وب شامل فرم هایی هستن که یکسری اطلاعات رو از کاربر دریافت میکنن ( مثل اطلاعات کاربر برای ثبت نام و .. )
پیاده سازی فرمها میتونن خیلی سخت و پیچیده باشن مخصوصا زمانیکه ما نیاز به فرم های پیچیده با ظاهر و عملکرد مناسب داریم.
آموزش ویدئویی React-Hook-Form
کتابخانه React Hook Form در ری اکت
React Hook Form یکی از بهترین کتابخانه های ری اکت هست که به ما اجازه میده فرم های پیچیده رو مدیریت کنیم. این کتابخانه عملکرد فوق العاده خوبی داره.
کتابخانه React Hook Form حجم خیلی پایینی داره، وابستگی کمی داره و خیلی عالی میتونه با کتابخانه های UI مثل Antd یا کتابخانه Material UI ادغام بشه.
پس اگه تو اپیکیشن ری اکتی خودمون فرم های پیچیده ای داریم و میخوایم خیلی راحت مدیریتشون کنیم، React Hook Form میتونه انتخاب فوق العاده ای برامون باشه
چطور از کتابخانه React Hook Form استفاده کنیم ؟
تو مرحله اول به کمک دستور زیر میتونیم این کتابخونه رو نصب کنیم :
npm i --save react-hook-form
حالا خیلی ساده میتونیم این کتابخانه رو داخل کامپوننت خودمون import کنیم :
import { useForm } from "react-hook-form";
تو تیکه کد بالا، ما هوک useForm رو فراخوانی کردیم. این هوک ویژگی ها و قابلیت های خیلی زیادی رو در اختیار ما میزاره. اما فعلا ما از ویژگی register و handleSubmit استفاده میکنیم.
مطابق کد زیر :
const { register, handleSubmit } = useForm();
ما باید input های خودمون رو به کمک یک متغیر register کنیم تا برای Validation و submit کردن فرم از اون متغیر استفاده کنیم.
بطور مثال برای register کردن یک input میتونیم از روش زیر استفاده کنیم :
حالا برای اینکه بتونیم به اطلاعات فرم و submit شدن فرم دسترسی داشته باشیم، میتونیم مطابق کد زیر از onSubmitmethod استفاده کنیم :
تموم مباحثی که راجبش صحبت کردیم ( تیکه کد های بالا ) رو میشه تو تیکه کد زیر بصورت کامل دید :
import { useState } from "react";
import { useForm } from "react-hook-form";
export default function ReactHookFormMini() {
const { register, handleSubmit } = useForm();
const [data, setData] = useState("");
const onSubmit = (data) => {
setData(data)
}
return (
React Hook Form Basic
Data: {JSON.stringify(data)}
);
}
خروجی کد بالا رو میشه تو تصویر زیر دید :
اعتبار سنجی فرم ها ( Form Validation )
ما باید از ورود داده های ناخواسته به فرم های خودمون جلوگیری کنیم. پس تقریبا تمامی فرمهای میتونن شامل Form Validation باشن!
بطور مثال ما میتونیم تعداد کاراکتر های Input رو کنترل کنیم ( اگه کم یا زیاد بود به کاربر هشدار بدیم )
اعتبار سنجی داده ها معمولا تو سه لایه مختلف انجام میشه تا اطمینان حاصل کنیم که اطلاعات نادرست به back-end و درنهایت database نمیرسه!
1
اعتبار سنجی داده در
Front-End
2
اعتبار سنجی داده در
Back-End
3
اعتبار سنجی داده در
DataBase
اعتبار سنجی فرم در ری اکت میتونه چالش برانگیز و سخت باشه! مخصوصا اگه فرم ما برزگ باشه و فیلد های زیادی داشته باشه!
کتابخانه React Hook Form در ری اکت این کار رو برامون راحت کرده 🙂 خود React Hook Form به کمک ویژگی های زیر Form Validation رو انجام میده:
ویژگی required :
ویژگی required مشخص میکنه که پر کردن این فیلد ضروریه یا خیر.
ویژگی min :
حداقل مقداری که میتونه این فیلد قبول کنه ( مثلا عدد 1 میتونه به عنوان حداقل مقدار تنظیم بشه، پس عدد 0 قابل قبول نیست )
ویژگی max :
حداکثر مقداری که میتونه این فیلد قبول کنه ( مثلا عدد 99 میتونه به عنوان حداکثر مقدار تنظیم بشه، پس عدد 100 قابل قبول نیست )
ویژگی minLength :
این ویژگی حداقل طول قابل قبول فیلد رو مشخص میکنه. مثلا برای دریافت شماره همراه کاربر میتونیم این ویژگی رو 11 تنظیم کنیم. در این صورت کاربر نمیتونه یک شماره تلفن همراه 10 رقمی وارد کنه!
ویژگی maxLength :
این ویژگی حداکثر طول قابل قبول فیلد رو مشخص میکنه. مثلا برای دریافت شماره همراه کاربر میتونیم این ویژگی رو 11 تنظیم کنیم. در این صورت کاربر نمیتونه یک شماره تلفن همراه 12 رقمی وارد کنه!
ویژگی pattern :
ما میتونیم regex های خودمون رو به کمک این ویژگی برای Form Validation هر فیلد تنظیم کنیم.
ویژگی validate :
به کمک این ویژگی میتونیم Function های خودمون رو برای Form Validation اعمال کنیم.
تو تیکه کد زیر یک input داریم که Form Validation براش لحاظ کردیم ( به کمک ویژگی های بالا ) :
اما این کافی نیست! چون اگه کاربر شرایط فیلد رو رعایت نکنه، هیچ اروری دریافت نمیکنه!
ما باید به کاربران خودمون یک متن ارور نمایش بدیم تا کاربر بدونه مشکل کجاست !! تو تیکه کد زیر یک Message به کاربر نمایش میدیم تا بدونه مشکلش کجاست :
ما حتی میتونیم ارور های دریافتی رو تو یه قالب دیگه به کاربر نمایش بدیم ( مثلا داخل تگ P ).
میتونیم ارور دریافتی رو که خودش یک Object هست از هوک useForm بگیریم و هر بلایی میخوایم سرش بیاریم :
const { formState: { errors } } = useForm();
{errors?.email?.message}
تو تصویر زیر، ارور دریافتی کاربر مشخصه :
ادغام با کامپوننت های دیگر ( مثل Antd یا Material UI )
ما میتونیم React Hook Form رو با کامپوننت های دیگه، مثل کامپوننت های Antd ادغام کنیم.
تو تیکه کد زیر ما کتابخانه React Hook Form رو با کامپوننت های کتابخانه Antd ادغام کردیم :
import React, { useState } from 'react';
import { Controller, useForm } from "react-hook-form";
import { Input, Checkbox, Slider } from "antd";
export default function RFHWithAntd() {
const { control, handleSubmit } = useForm();
const [data, setData] = useState({});
const onSubmit = (data) => {
setData(data)
}
return (
React Hook Form With AntD
Data: {JSON.stringify(data)}
)
};
تو تصویر زیر میشه خروجی تیکه کد بالا رو دید :
چند مثال از کتابخانه React Hook Form در ری اکت
کمی قبل تر اشاره کردیم که React Hook Form در ری اکت به بهبود Performance اپیکیشن کمک میکنه اما توضیح ندادیم چرا !
کتابخانه React Hook Form میتونه re-render های فرم رو مدیریت کنه و از re-render های اضافی جلوگیری کنه!
فرم های ساده چنین قابلیتی ندارن و با هر تغییر مقدار فرم، یکبار re-render میشن!
تو ادامه میخوایم 2 فرم بسازیم ( یک فرم با JSX خام و یک فرم با React Hook Form ) سپس مقایسه میکنیم که کدوم فرم عملکرد بهتری دارن ..
اول بریم فرم JSX ساده بسازیم :
import React, { useState } from 'react';
let renderCount = 0
export default function NormalForm() {
const [name, setName] = useState('');
const [email, setEmail] = useState('');
const [showFormData, setShowFormData] = useState(false)
const onSubmit = (event) => {
event.preventDefault()
setShowFormData(true)
console.log('Run Validations Manually, maintain & show errors on UI, if all good make API call.')
}
renderCount += 1
return (
Normal Form
Render Count -- {renderCount}
{
Data:
{
showFormData ?
{name} {email}
: null
}
}
);
}
حالا یک فرم به کمک کتابخانه React Hook Form در ریکت میسازیم :
import { useState } from "react";
import { useForm } from "react-hook-form";
let renderCount = 0
export default function ReactHookForm() {
const { register, handleSubmit } = useForm();
const [data, setData] = useState("");
const onSubmit = (data) => {
setData(JSON.stringify(data))
}
renderCount += 1
return (
React Hook Form
Render Count -- {renderCount}
Data: {data}
);
}
در آغاز میبینیم که هر فرم 2 بار render شده :
اما زمانیکه یکسری اطلاعات یکسان تو هر 2 فرم وارد میکنیم، نتیجه عجیب غریب میشه!!!
توی فرمی که با React Hook Form ساختیم فقط 4 رندر گرفتیم اما توی فرم ساده JSX خودمون 54 رندر گرفتیم!
تفاوت این 2 عدد خیلی زیاده. این رو در نظر بگیرید که این فرم ما فقط 2 فیلد ورودی داره، حالا تصور کنید فرم ما ده ها فیلد ورودی داره! نتیجه وحشتناک میشه 🙂
دیدیم که React Hook Form چقدر به بهبود Performance اپیکیشن ما کمک میکنه .
ویژگی های پیشرفته کتابخانه React Hook Form
هوک useForm یک ویژگی به اسم formState در اختیار ما میزاره که یکسری اطلاعات درمورد تعامل کاربر با فرم در اختیار ما میزاره. بریم ببینیم چه اطلاعاتی در اختیار ما میزاره :
ویژگی isDirty :
این ویژگی یک مقدار boolean هست که نشون میده کاربر شروع به تعامل با فرم کرده یا نه.
ویژگی isValid :
این ویژگی یک مقدار boolean هست که نشون میده شرایط فعلی فرم Valid ( قابل قبول ) هست یا خیر.
ویژگی errors :
این ویژگی یک Object هست که شامل ارور های دریافتی فرم هست. ( اگه اروری وجود داشته باشه )
ویژگی isSubmitted :
این ویژگی یک مقدار boolean هست. اگه کاربر حداقل یکبار سعی کرده باشه که فرم رو submit کنه و اطلاعات ارسال بشه، این مقدار true میشه.
ویژگی touchedFields :
این ویژگی یک Object هست و شامل فیلدی هست که کاربر میخواد باهاش کار کنه.
ویژگی dirtyFields :
این ویژگی یک Object هست و شامل اون فیلدی هست که کاربر چیزی داخلش نوشته یا باهاش کار کرده.
جمع بندی
کتابخانه React Hook Form در React کمک میکنه تا خیلی بهتر بتونیم فرم های خودمون رو مدیریت کنیم .
ما دیدیم که توی فرم های ساده چقدر Performance ضعیفی داشتیم! ( به دلیل re-render زیاد )
پیشنهاد میکنم اگه توی اپیکیشن خودتون فرم دارید، حتما از React Hook Form استفاده کنید 🙂
کتابخانه React Hook Form کمک میکنه تا بتونیم فرم های خودمون رو مدیریت کنیم. همچنین ویژگی های خوبی برای اعتبار سنجی فرم ( Form Validation ) در اختیار ما میزاره. علاوه بر همه اینها استفاده از React Hook Form به بهبود Performance اپیکیشن ما کمک میکنه و از re-render اضافی جلوگیری میکنه.
مقایسه هایی که انجام دادیم نشون داد کتابخانه React Hook Form عملکرد بهتری در مدیریت فرم ها در React داره.
درباره احمد احمدنژاد
من یه برنامه نویس و توسعه دهنده وب هستم که عاشق دنیای صفر و یکم❤️
نوشتههای بیشتر از احمد احمدنژاد4 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
عالی بود 🙂
سلام علی جان خوشحالم که برات مفید واقع شده موفق باشی 🙂
دمتون گرم بابت زحماتی که برای ساخت این آموزش کشیدین ❤️🔥
قربانت محمدجان 🙂 خوشحالم که برات مفید بوده.
موفق باشی