สวัสดีครับวันนี้จะพามารู้จัก Vue.JS เป็น Front-End Framework ที่ช่วยให้สามารถเขียน Javascript ได้ง่ายขึ้น ทำให้ลดระยะเวลาในการ Dev โปรเจกต์ลงได้ โดยที่เรื่องที่จะมาแนะนำวันนี้เป็นเรื่องของ Vue 3 คืออะไร? แตกต่างกับ Vue 2 อย่างไร? มีข้อดีอย่างไร? ควร Migrate มากน้อยแค่ไหน?บทความนี้มีคำตอบครับ
โดย คุณเสรี มากเอียด
Business Unit Manager, MFEC
Vue 2 ( Option api ) vs Vue 3 ( Composition api)
สิ่งแรกที่ไม่พูดถึงไม่ได้เลยก็คือ Composition api ที่เป็นหนึ่งใน Feature ใหม่ และเรียกว่าเป็นพระเอกของ Vue 3 เลยก็ว่าได้ เรามาดูกันครับว่ามันจะแตกต่างและมีการเขียนแบบไหน
// Options API export default { data() { return { name: 'John', }; }, methods: { doIt() { console.log(`Hello ${this.name}`); }, }, mounted() { this.doIt(); }, };
Composition api export default { setup() { const name = ref('John'); const doIt = () => console.log(`Hello ${name.value}`); onMounted(() => { doIt(); }); return { name }; }, };
อย่างตัวอย่าง Code จะเห็นว่า Option api มีการ ใช้งาน Option ต่าง ๆ เช่น data, methods, mounted แต่ Composition api นั้นมีการใช้ hook เพียงตัวเดียวก็คือ setup เพียงอย่างเดียว
อะไรทำให้ ต้องเขียน Composition มากกว่า Option api ล่ะ?
Better Logic Reuse
Composition api นั้นจะทำให้เราสามารถ เขียน code ที่ clean กว่าและ การ reuse ทำได้กว่าเพราะมี Composable functions มาให้ใช้งานและที่สำคัญ Composition api ทำให้ไม่ต้องเขียน Mixin อีกแล้ว เย้ …More Flexible Code Organization
หลายๆคนอาจจะชอบ Option api เพราะ ทุกอย่าง based on the option ไม่ว่าจะส่วนไหนก็ สามารถแยกไปตาม option ได้ แต่อย่างไรก็ตาม Option api นั้นมีข้อที่ควรคำนึงถึงอยู่นั่นก็คือ limitations when a single component’s logic grows beyond a certain complexity threshold หรือง่ายๆก็คือเมื่อในหนึ่ง component มีการเขียน function หรือ logic ที่มีความซับซ้อนมากๆนั้นการที่จะแก้ไขหรือตวรจสอบเป็นไปได้ยากเพราะ Code เองนั้นมีการแยกส่วนไปตามแต่ ละ option และในแต่ละ option ก็จะมีการแยกส่วนไปตามแต่ละส่วนที่เกี่ยวข้องกัน เรามาดูตัวอย่างกันครับ
จากรูปจะเห็นว่าใน Option api ในแต่ละ function ที่เกี่ยวข้องกัน จะแยกไปตามสีและในแต่ละ option ก็จะมีส่วนที่เกี่ยวข้องแยกไปตามสีอีกที แต่จะเห็นว่า ใน Compostion api นั้นเราสามารถเขียน function ให้รวบรัดตัดจบภายในส่วนเดียวแล้วขึ้น function ใหม่ได้ทันทีเลยไม่ต้องเสียเวลา มาประกาศทีละส่วนแล้ว เย้ …
ใช้ Vue 2 ควร Migrate เลยไหม ? Migrate แล้ว ดีอย่างไร ?
แม้ว่า Vue 3 จะส่งพระเอกขี่ม้าขาวอย่าง Compsoition api มาแต่การจะ Migrate นั้นก็ไม่ยุ่งยากครับ เพราะถึงจะมี Composition api มาแต่การเขียน Option api ก็ยังอยู่เหมือนเดิมไม่ต้องมีการ re-write code แต่อย่างใด แถมได้ Features ใหม่ๆ และ Performance ที่ดีขึ้นอีก แล้วทำไมจะไม่ Migrate หละ !
* ถึงแม้ว่าการ Migrate แทบจะไม่ได้มีการ re-write code เลยแต่ คนที่ไม่คุ้นเคยกับ Vue มากขนาดนั้น ผมก็แนะนำว่าอย่างพึ่ง Migrate หรือ ถ้าอยาก Migrate ทันทีอาจจะต้องศึกษา Vue 3 ให้เรียบร้อยและตรวจสอบ Breakin changes ต่างๆให้เรียบร้อยก่อน สามารถอ่านตามคู่มือด้านล่างได้เลยครับ
คู่มือ : Vue 3 Migration Guide | Vue 3 Migration Guide (vuejs.org)
ถ้าจะเริ่ม Project ใหม่ ควรเริ่ม Vue 3 หรือ Vue 2 ดี?
สำหรับคนที่จะขึ้น Project ใหม่ผมแนะนำให้ขึ้นเป็น Vue 3 ไปเลยครับ เพราะถึงจะเป็น Vue 3 ก็ยังเขียน Option api ได้ หรืออยากลองพระเอกอย่าง Composition api ก็จัดไปได้เลย
สรุปของบทความนี้
สำหรับคนที่อ่านมาถึงตรงนี้ก็พอจะรู้จักการเขียน Vue 3 กันมากขึ้นไม่มากก็น้อยกันบ้างแล้วนะครับ ซึ่งในบทความนี้ผมขอเจาะไปที่ Compoisiton api ซะส่วนมากนะครับ แต่ยังมีการของเล่นที่น่าใช้อีกครับ อย่างเช่นการเขียน Composables function (ที่ผมไม่ได้พูดถึงในบทความนี้ ฮาๆ)
พลังในการใช้ Typesctipt กับ vue 3 แต่ถ้าจะให้ผมสรุปเลยพลังหลัก ๆ ของ Vue 3 นั้นจะทำให้เราแบ่งการเขียน Code ออกไปเป็น Module ต่าง ๆ มากกว่าเดิม ซึ่งหมายความว่าจะทำให้ Code เรามี ความ Flexible สูงและการทำงาน ใน team ใหญ่ๆนั้นเป็นไปได้ง่าย และสะดวกขึ้นครับ สุดท้ายนี้ก็ขอบคุณที่อ่านมาจนจบนะครับ
ผิดพลาดประการใดขออภัยนะครับ แล้วไว้มีโอกาสจะกลับมาเขียนให้อีกแน่นอนครับ
อ้างอิงจาก
- Vue 3 Composition API vs. Options API, สืบค้นเมื่อ 26 พฤษภาคม 2565 จาก: https://markus.oberlehner.net/blog/vue-3-composition-api-vs-options-api/
- Vue.js – The Progressive JavaScript Framework | Vue.js (vuejs.org), สืบค้นเมื่อ 26 พฤษภาคม 2565 จาก: https://vuejs.org/
- Vue 3 Migration Guide | Vue 3 Migration Guide (vuejs.org), สืบค้นเมื่อ 26 พฤษภาคม 2565 จาก: https://v3-migration.vuejs.org/