วิธีใช้ลอจิกซ้ำใน Vue.js ด้วย Composables
เมื่อเขียนโปรแกรม สิ่งสำคัญคือต้องจัดโครงสร้างโค้ดเบสของคุณเพื่อให้คุณใช้โค้ดซ้ำได้หากเป็นไปได้ การทำซ้ำโค้ดอาจทำให้โค้ดเบสขยายและทำให้การแก้ไขจุดบกพร่องซับซ้อนขึ้น โดยเฉพาะในแอปขนาดใหญ่
Vue อำนวยความสะดวกในการนำโค้ดกลับมาใช้ใหม่โดยใช้องค์ประกอบที่เขียนได้ องค์ประกอบเหล่านี้เป็นฟังก์ชันหลักที่ครอบคลุมชุดตรรกะเฉพาะ ซึ่งช่วยให้สามารถบูรณาการอย่างราบรื่นในส่วนประกอบต่างๆ ภายในโครงการเดียว เพื่อให้สามารถจัดการกับฟังก์ชันการทำงานที่เทียบเคียงได้
มันเป็นองค์ประกอบที่สามารถประกอบได้เสมอหรือเปล่า?
ก่อนที่จะมีการเปิดตัว composable ใน Vue 3 นักพัฒนาใช้มิกซ์อินเพื่อแยกโค้ดที่นำมาใช้ซ้ำได้และนำไปใช้ทั่วทั้งแอปพลิเคชันของพวกเขา มิกซ์อินเหล่านี้ประกอบด้วยการกำหนดค่า Vue.js มากมาย รวมถึงคุณสมบัติของข้อมูล วิธีการ และวงจรการใช้งานของส่วนประกอบ ซึ่งอำนวยความสะดวกในการแบ่งปันโค้ดอย่างกว้างขวางระหว่างองค์ประกอบต่างๆ
หากต้องการนำมิกซ์อินไปใช้ โดยทั่วไปแล้วเราจะจัดระเบียบมิกซ์อินเหล่านั้นเป็นไฟล์แต่ละไฟล์และรวมไว้ในคอมโพเนนต์โดยรวมไว้เป็นส่วนหนึ่งของคุณสมบัติ"มิกซ์อิน"ของคอมโพเนนต์ภายในการตั้งค่าตัวเลือกที่เกี่ยวข้อง เพื่อเป็นตัวอย่าง ให้พิจารณาข้อมูลโค้ดต่อไปนี้:
// formValidation.js
export const formValidationMixin = {
data() {
return {
formData: {
username: '',
password: '',
},
formErrors: {
username: '',
password: '',
},
};
},
methods: {
validateForm() {
this.formErrors = {};
if (!this.formData.username.trim()) {
this.formErrors.username = 'Username is required.';
}
if (!this.formData.password.trim()) {
this.formErrors.password = 'Password is required.';
}
return Object.keys(this.formErrors).length === 0;
},
},
};
ส่วนรหัสนี้แสดงองค์ประกอบของมิกซ์อินที่ใช้สำหรับการตรวจสอบแบบฟอร์ม mixin ดังกล่าวประกอบด้วยแอตทริบิวต์ข้อมูลสองรายการ-formData และ formErrors-ซึ่งเริ่มแรกจะกำหนดค่าว่างหรือค่าโมฆะ
กลไกการจัดเก็บข้อมูลที่เรียกว่า formData
มีหน้าที่รับผิดชอบในการเก็บรักษาข้อมูลที่ส่งผ่านแบบฟอร์มบนเว็บ ซึ่งรวมถึงช่องว่างที่กำหนดสำหรับชื่อผู้ใช้และรหัสผ่าน ในทำนองเดียวกัน ตัวแปร formErrors
ได้ถูกสร้างขึ้นด้วยโครงสร้างที่เหมือนกันเพื่อรองรับข้อความแสดงข้อผิดพลาดที่อาจเกิดขึ้นได้ โดยทั้งสองค่าจะถูกเตรียมใช้งานให้เป็นโมฆะของเนื้อหาตั้งแต่แรก
Mixin รวมวิธีการที่เรียกว่า validateForm()
ซึ่งทำหน้าที่ตรวจสอบว่าช่องป้อนข้อมูลชื่อผู้ใช้และรหัสผ่านถูกกรอกหรือไม่ ในกรณีที่ช่องใดช่องหนึ่งว่าง ฟังก์ชันจะเติมแอตทริบิวต์ formErrors
พร้อมการแจ้งเตือนข้อผิดพลาดที่เหมาะสม
การใช้งานทำให้แน่ใจได้ว่าวิธีการนี้ให้ค่าบูลีนเป็นจริงเมื่อไม่มีข้อผิดพลาดในโครงสร้างข้อมูล formErrors หากต้องการใช้ฟังก์ชันนี้ภายในส่วนประกอบ Vue.js เราอาจนำเข้าโมดูลที่เกี่ยวข้องซึ่งมีฟังก์ชัน reactiveMixin และรวมไว้เป็นส่วนหนึ่งของคุณสมบัติมิกซ์อินของออบเจ็กต์ Options การบูรณาการนี้ช่วยให้ส่วนประกอบสามารถใช้ประโยชน์จากฟังก์ชัน reactiveMixin ซึ่งรวมถึงการตรวจจับข้อผิดพลาดอัตโนมัติและการซิงโครไนซ์กับส่วนประกอบหลักเมื่อค่าอินพุตเปลี่ยนแปลง
<template>
<div>
<form @submit.prevent="submitForm">
<div>
<label for="username">Username:</label>
<input type="text" id="username" v-model="formData.username" />
<span class="error">{{ formErrors.username }}</span>
</div>
<div>
<label for="password">Password:</label>
<input type="password" id="password" v-model="formData.password" />
<span class="error">{{ formErrors.password }}</span>
</div>
<button type="submit">Submit</button>
</form>
</div>
</template>
<script>
import { formValidation } from "./formValidation.js";
export default {
mixins: [formValidation],
methods: {
submitForm() {
if (this.validateForm()) {
alert("Form submitted successfully!");
} else {
alert("Please correct the errors in the form.");
}
},
},
};
</script>
<style>
.error {
color: red;
}
</style>
ในกรณีนี้ เราสังเกตองค์ประกอบ Vue ที่ใช้กลยุทธ์ออบเจ็กต์ Options การผสมผสานคุณสมบัติครอบคลุมทุกมิกซ์อินที่ได้รับการนำเข้าเพื่อใช้ภายในโครงสร้างที่กำหนด โดยเฉพาะอย่างยิ่ง ส่วนประกอบจะใช้ฟังก์ชัน validateForm ที่ได้มาจาก formValidation mixin เพื่อแจ้งให้ผู้ใช้ปลายทางทราบถึงผลลัพธ์ของการส่งแบบฟอร์ม กล่าวคือไม่ว่าจะดำเนินการสำเร็จหรือไม่ก็ตาม
วิธีใช้คอมโพสิต
composable คือโมดูล JavaScript แบบสแตนด์อโลนที่ครอบคลุมฟังก์ชันการทำงานที่ปรับแต่งตามความต้องการหรือวัตถุประสงค์เฉพาะ ช่วยให้ควบคุมความสามารถของ Composition API ของ Vue ภายในขอบเขตโดยการใช้ทรัพยากร เช่น ตัวแปรเชิงโต้ตอบและค่าที่คำนวณ
การใช้จุดเชื่อมต่อนี้ให้สิทธิ์ในการพัฒนาฟังก์ชันที่เชื่อมต่อกับองค์ประกอบมากมายได้อย่างราบรื่น ฟังก์ชันดังกล่าวจะสร้างเอนทิตี ซึ่งสามารถนำเข้าและหลอมรวมภายในส่วนประกอบ Vue ได้อย่างง่ายดายผ่านขั้นตอนการกำหนดค่าที่ Composition API มอบให้
ในการใช้องค์ประกอบที่เขียนได้ในโปรเจ็กต์ของคุณ จำเป็นต้องสร้างไฟล์ JavaScript ใหม่ภายในไดเร็กทอรี “src” ของโปรเจ็กต์ของคุณ ในกรณีที่โปรเจ็กต์ต้องการการจัดระเบียบในระดับที่ละเอียดยิ่งขึ้น เราอาจเลือกที่จะสร้างโฟลเดอร์ย่อยภายในไดเร็กทอรี"src"และกำหนดไฟล์ JavaScript แต่ละไฟล์สำหรับองค์ประกอบที่เขียนได้ต่างๆ จำเป็นอย่างยิ่งที่ชื่อไฟล์ที่กำหนดของแต่ละองค์ประกอบจะต้องแสดงถึงฟังก์ชันหรือวัตถุประสงค์ที่ตั้งใจไว้อย่างถูกต้อง
ในการสร้างส่วนประกอบแบบโมดูลาร์ที่นำมาใช้ซ้ำได้สำหรับการตรวจสอบความถูกต้องของแบบฟอร์มใน JavaScript จำเป็นต้องกำหนดฟังก์ชันภายในไฟล์สคริปต์ที่สรุปตรรกะและฟังก์ชันการทำงานที่เกี่ยวข้องทั้งหมดก่อน ด้วยการปรับโครงสร้างมิกซ์ FormValidation ในลักษณะนี้ เราจะสามารถบรรลุความยืดหยุ่นและความสะดวกในการใช้งานมากขึ้น เมื่อนำการตรวจสอบความถูกต้องของแบบฟอร์มไปใช้ในหลายโครงการหรือแอปพลิเคชัน
// formValidation.js
import { reactive } from 'vue';
export function useFormValidation() {
const state = reactive({
formData: {
username: '',
password: '',
},
formErrors: {
username: '',
password: '',
},
});
function validateForm() {
state.formErrors = {};
if (!state.formData.username.trim()) {
state.formErrors.username = 'Username is required.';
}
if (!state.formData.password.trim()) {
state.formErrors.password = 'Password is required.';
}
return Object.keys(state.formErrors).length === 0;
}
return {
state,
validateForm,
};
}
ข้อมูลโค้ดที่กำหนดจะนำเข้าฟังก์ชันแบบโต้ตอบจากแพ็คเกจ Vue และต่อมาพัฒนาผู้ส่งออกชื่อ useFormValidation()
ซึ่งทำหน้าที่จัดการการตรวจสอบความถูกต้องของแบบฟอร์มภายในแอปพลิเคชัน
รหัสจะดำเนินการโดยการกำหนดตัวแปรปฏิกิริยาชื่อ state
ซึ่งเก็บคุณสมบัติ formData
และ formErrors
ภายในขอบเขตของมัน ซึ่งช่วยให้เข้าถึงค่าเหล่านี้ได้อย่างสะดวกในระหว่างการส่งและการเตรียมใช้งานแบบฟอร์ม ต่อจากนั้น ตัวอย่างข้อมูลจะใช้วิธีการที่คล้ายกันอย่างมากกับวิธีการที่แสดงโดยมิกซ์อินที่กล่าวถึงก่อนหน้านี้ เพื่อจัดการกระบวนการตรวจสอบความถูกต้องของแบบฟอร์ม ท้ายที่สุดแล้ว ผลลัพธ์คือการจัดเตรียมตัวแปร state
และฟังก์ชัน validateForm
ให้เป็นเอนทิตีที่รวมกัน
การรวมฟังก์ชัน JavaScript จากไฟล์ที่ระบุลงในส่วนประกอบของคุณสามารถทำได้ผ่านกระบวนการนำเข้าภายในไฟล์ที่เกี่ยวข้อง
<template>
<div>
<form @submit.prevent="submitForm">
<div>
<label for="username">Username:</label>
<input type="text" id="username" v-model="state.formData.username" />
<span class="error">{{ state.formErrors.username }}</span>
</div>
<div>
<label for="password">Password:</label>
<input type="password" id="password" v-model="state.formData.password" />
<span class="error">{{ state.formErrors.password }}</span>
</div>
<button type="submit">Submit</button>
</form>
</div>
</template>
<script setup>
import { useFormValidation } from "./formValidation.js";
import { ref } from "vue";
const { state, validateForm } = useFormValidation();
const submitForm = () => {
if (validateForm()) {
alert("Form submitted successfully!");
} else {
alert("Please correct the errors in the form.");
}
};
</script>
<style>
.error {
color: red;
}
</style>
หลังจากการแนะนำส่วนประกอบการทำงาน useFormValidation
การใช้งานในปัจจุบันจะดำเนินการเพื่อแยกโครงสร้างอ็อบเจ็กต์ JavaScript ที่นำเข้าควบคู่ไปกับส่วนประกอบดังกล่าว กระบวนการนี้ช่วยให้สามารถดำเนินการขั้นตอนการตรวจสอบความถูกต้องของแบบฟอร์มภายในแอปพลิเคชันต่อไปได้ ต่อมาโปรแกรมจะเพิ่มการแจ้งเตือนโดยมีรายละเอียดผลลัพธ์ของการส่งที่สำเร็จหรือข้อผิดพลาดทั่วไปใดๆ ที่ตรวจพบในระหว่างขั้นตอนการประเมิน
Composables คือมิกซ์อินใหม่
Vue Composables นำเสนอการปรับปรุงที่เหนือกว่า Mixins เนื่องจากนำเสนอวิธีการรีไซเคิลที่เป็นระเบียบและยั่งยืนมากขึ้นภายในโปรเจ็กต์ Vue.js ช่วยให้นักพัฒนาสามารถสร้างเว็บแอปพลิเคชันขนาดใหญ่ขึ้นได้อย่างง่ายดายโดยใช้ประโยชน์จากข้อดีที่ Vue มอบให้