React Hook Form EP.1

JFKongphopp
Stand Up Code

--

วันนี้เราจะมาพูดถึง React Hook Form เป็นหนึ่งใน Library ที่ใช้ในการ Form Validation ร่วมกับ React ซึ่งเป็น Library ที่ใช้ในการพัฒนาเว็บไซต์อย่างแพร่หลายในปัจจุบันนี้ ที่เราเลือกมาเพราะเป็นหนึ่งใน Library ที่หน้าสนใจและสามารถทำให้เรานั้นขึ้นงานเราได้ไวมากยิ่งขึ้น ในบทความนี้เราจะขอย่อจาก React Hook Form เป็น RHF จะได้เรียกง่ายมากขึ้นและไม่ยาวมากจนเกินไป

RHF นั้นใช้ Code ในการใช้ร่วมกับ Input tag น้อยกว่าการ implement ด้วยการ Code เองใหม่ทั้งหมดและสามารถกลับมาแก้ไขหรือซ่อมตัว Code ได้ไวและแบ่งการทำงานได้ดียิ่งขึ้น และอีกหนึ่งจุดเด่นนั้นคือเรื่องความเร็วเนื่องจากตัว RHF จะแบ่งแยกการทำงานของ Form ออกจาก Component อื่นๆ ซึ่งจะช่วยเรื่อง Performance ให้ดียิ่งขึ้นตัวอย่างเช่นเมื่อ Form ถูกใช้งานนั้น React จะ Re-Render แค่ตัว Form ที่ใช้ RHF เท่านั้นไม่ Render Component อื่นจึงำให้เว็บของเรานั้นไวยิ่งขึ้น

เรามาเริ่มขั้นตอนการใช้งานก่อนเลยดีกว่าซึ่งการติดตั้งนั้นก็ติดตั้งเหมือนตัวอื่นๆ ทั่วไป

npm install react-hook-form

ในบทความนี้เราจะพูดถึงการใช้งานขั้นพื้นฐานเบื้องต้นในการใช้ก่อนนะครับหลังจ่กที่เราติดตั้งไปแล้วเราก็ทำการเรียกใช้ Module นั้นปกติไม่ต้องมีการ Set Up File ใดๆ ทั้งสิ้น

import { useForm } from "react-hook-form";

เราจะใช้เพียงแค่ useForm ในบทความนี้ก็เพียงพอสำหรับการใช้งานขั้นพื้นฐานแล้ว

ก่อนที่เรานั้นจะไปอธิบาย Code พื้นฐานานนั้นเราจะมาเปรียบเทีบยการ Implement ด้วยตัวเองกับการใช้ RHF

ตัวอย่างการ Implement ด้วยตัวเอง

import { useState } from 'react';

const App = (props) => {
const [firstnamel, setFirstname] = useState('');

const firstnameChangeHandler = (event) => {
setEnteredEmail(event.target.value);
}

const submitHandler = (event) => {
event.preventDefault();
console.log(firstname);
}

return (
<form onSubmit={submitHandler}>
<input onChange={firstnameChangeHandler} />
<button type="submit" >Submit</button>
</form>
)
}

export default App;

ตัวอย่างการใช้ RHF

import { useForm } from "react-hook-form";

const App = () => {
const { register, handleSubmit } = useForm();

const onSubmit = (data) => {
console.log(data);
}

return (
<form onSubmit={handleSubmit(onSubmit)}>
<input {...register("firstname")} />
<button type="submit" >Submit</button>
</form>
);
}

export default App;

code ที่เรา implement กับการใช้ RHF เมื่อเปรียบเทียบกันแล้วนั้นยาวกว่ากันอย่างแน่นอน แล้วเรื่อง Perfomance นั้น Code ที่เรา implement ก็ช้ากว่าด้วยนั้นเอง เพราะว่าในการพิม input ลงใน Input tag component ที่เรา Re-Render นั้นจะเกิดการ Re-Render ใหม่ทั้งหมดทุก component จึงทำให้ Perfomance ของเว็บไซต์เราตกลงได้ถ้า เมื่อเราใช้ในการขึ้น Production ที่ใหญ่กว่าที่ยกตัวอย่างข้างต้นมานั้นเอง แต่ถ้าเราใช้ RHF จะเกิดการ Re-Render ใหม่เฉพาะแค่ตัว Component ที่เราใช้ RHF เท่านั้นไม่กระทบต่อ Component อื่นๆ จึงทำให้ Perfomance นั้นดีกว่านั้นเอง

ใน useForm นั้นมีหลาย Function ให้ใช้งานอย่างหลากหลายมากแต่เราจะใช้เพียง register และ handleSubmit ก่อนเพราะว่าสองตัวนี้ก็เพียงพอแล้วในขั้นพื้นฐานเพื่อไม่ให้เกิดความสับสน

ตัวแรก register เราจะใช้ Function นี้ใน Input tag ซึ่ง register มันมี option ในตัวของ Input tag ให้ใช้อยู่ถึง 4 ตัวด้วยกันคือ onChange, onBlur, ref, name ซึ่งจะใช้ในตัว register ได้เลย การใช้ register พื้นฐานคือ {…register(“firstname”) firstname จะเป็น key ที่เอาไว้เก็บข้อมูลในตัว Input tag ของเราซึ่งตัว type ของข้อมูลนั้นจะเป็น object ซึ่ง schema เป็น { firstname: “” } ค่า default ของ firstname นั้นคือ “” เมื่อเราพิมเข้าไปใน Input tag นั้นข้อมูลที่พิมก็จะถูกเก็บลงใน key ของ firstname นั้นเอง

ตัวที่สอง handleSubmit คือตัวที่เราเอาไว้ใช้ใน onSubmit ซึ่งอยู่ใน Form tag ซึ่งจะใช้ในรูปแบบนี้ <form onSubmit={handleSubmit(onSubmit)}> อย่างในตัว Code ที่เรายกตัวอย่างข้างบนมาหรือจะเขียนให้ยาวยิ่งขึ้นแบบนี้ <form onSubmit={handleSubmit((data) => onSubmit(data)}> ได้เช่นกันเพราะเป็น Callback Function เลือกได้ตามใจชอบเลยครับ และเมื่อเรากด Submit form ไปตัว schema ที่เราจะเห็นได้คือ { firstname: “” } เพราะเราไม่ได้ใส่ข้อมูลอะไรเข้าไป

ติดตามตอนต่อไปซึ่งจะมีหลายๆ อย่างในการใช้และเล่นมากยิ่งขึ้น…

--

--

JFKongphopp
Stand Up Code

I'm studying Financial Engineering but prefer in Computer Science and interested Blockchain and FullStack development.