Vue 3 Guided Tour — พาเที่ยว Vue 3

Runyasak Chaengnaimuang
3 min readMar 24, 2020

แม้ว่า ณ ตอนนี้ Vue 3 ยังไม่ได้เปิดตัวมาเป็นทางการ แต่เราก็สามารถทดลองใช้งาน Vue Composition API และ Vue 3 ได้ในเวอร์ชันของ alpha

และวันนี้เราจะมาพาทุกคนทัวร์ Vue 3 ในเวอร์ชัน alpha.8 กัน โดยจะทัวร์ในโปรเจคของ vue-next-webpack-preview ซึ่งเป็นตัวอย่างการใช้งาน Vue 3 ที่มาพร้อมกับ Webpack ให้เรียบร้อยแล้ว

Feature และรายละเอียดของ Vue 3ภายในบทความนี้ ยังอยู่ในช่วงของ alpha version ซึ่งไม่แนะนำให้นำไปใช้ในงาน Production

Installation

เราจะเริ่มด้วยการ Clone โปรเจคนี้ลงมาที่เครื่องเรา พร้อมกับการติดตั้ง Dependencies และ run dev กันเลย

$ git clone https://github.com/vuejs/vue-next-webpack-preview.git
$ cd vue-next-webpack-preview
$ npm i
$ npm run dev

จะสังเกตตอนช่วง run dev นั้นทำงานไวมาก ๆ แต่ความพีคของเจ้า Vue 3 ตอนนี้คือ Vue.js devtools ไม่ทำงาน ซึ่งส่วนตัวคาดว่าถ้า Official แล้วน่าจะสามารถทำงานปกติ

main.js

เริ่มกันที่ไฟล์พระเอกของเรา จะเห็นว่าเราไม่จำเป็นต้องประกาศ Vue Instance เป็น Global อีกต่อไป เพราะเราสามารถใช้ createApp ที่เป็น API Function จาก vue ได้เลย และ createApp นี้จะทำให้บทบาทของ App Component จาก Root Component เป็น Root Instance ทันที

App.vue

มาต่อกันกับไฟล์ที่เราคุ้นเคยอย่าง App.vue ซึ่งเริ่มต้นด้วยรูป Vue บนหน้าจอ มีการเริ่มต้นที่คล้ายกับของ Vue 2

ความอัศจรรย์แรกที่เราเห็นคือ เราสามารถประกาศ Multiple Root ใน Template ได้แล้ว โดยเราไม่จำเป็นจะต้องสร้าง <div> มาครอบ Component เราเพิ่มอีกต่อไป

สิ่งที่เพิ่มเข้ามาจะเป็น setup() โดย Option นี้จะถูกเรียกในช่วง Lifecycle ระหว่าง beforeCreate และ created พร้อมกับการใช้งาน Vue Composition API และประกาศตัวแปรต่าง ๆ เรียกได้ว่าเป็นศูนย์รวมของ Logic เลยก็ว่าได้

การประกาศตัวแปรที่ทำให้เกิด Reactive References ได้นั้น มีอยู่ 2 ท่าหลักๆ ที่จะพบเห็นบ่อย นั่นคือ reactive ที่จะรับค่าเป็น Object และ ref ที่จะรับค่ามาเป็น Type อื่น ๆ ได้

ภายใต้การทำงานของ Vue 3 เมื่อใดที่ ref รับค่าเป็น Object จะเป็นการเรียกใช้ reactive ทันที

แต่อย่างไรก็ตาม เรายังคงสามารถใช้ Option API เดิมที่เราคุ้นเคยใน Vue 2 อย่าง data() , computed() , methods เป็นต้น

สำหรับใครที่อยากอ่าน Docs ของ Vue Composition API ของปัจจุบัน สามารถดูได้จากลิงค์ด้านล่างนี้ได้เลย

HelloWorld Benchmark

ด้วยความแอบซนของเรา ที่อยากรู้ว่าถ้าเรา Build โปรเจค Vue 3 นี้ที่มีเพียงไฟล์เริ่มต้นอย่าง HelloWorld.vue จะได้ Bundle Size รวมที่เล็กกว่า Vue 2 และไวกว่าหรือไม่

HelloWorld.vue จาก Vue 2

ทีนี้ก่อนที่เราจะเริ่ม Build เราเลย Copy ไฟล์ HelloWorld.vue จาก Vue 2 มาใส่ในโปรเจคนี้ เพื่อจะทำให้ Environment ของทั้งสองนั้นใกล้เคียงกันมากที่สุด และผลลัพธ์ที่ได้คือ

Vue v2.6.11

  • Total Bundle Size: 631 KB
  • Build Time: 11.01 วินาที

Vue v3.0.0-alpha.8

  • Total Bundle Size: 442KB
  • Build Time: 6.09 วินาที

ทำให้เห็นว่า Vue 3 นั้นสามารถ Build โปรเจคได้รวดเร็ว พร้อมกับได้ Bundle Size ที่เล็กกว่าของ Vue 2 อีกด้วย ทั้งนี้อาจจะต้องลองเทียบกันอีกทีในตอนที่ Official แล้ว

Single Transparent Wrapper และ Render Function แบบใหม่ยังใช้ไม่ได้

ภาพจาก https://media.giphy.com/media/dJYoOVAWf2QkU/giphy.gif

อันนี้ทำเราแอบเศร้าอยู่นิดหนึ่ง คือเราได้ลองทำ Single Transparent Wrapper จากตัวอย่างของ Chris Fritz ซึ่งมันยังคงใช้ไม่ได้ ในขณะเดียวกัน Render Function แบบใหม่ ก็ยังไม่สามารถใช้ได้

สำหรับใครที่อยากอ่านสรุป Feature เจ๋ง ๆ ของ Vue 3 จาก Chris Fritz สามารถอ่านได้จากบทความด้านล่างนี้ได้เลย

แม้ว่า Vue 3 ที่ ณ ตอนนี้ได้ทดลองเป็นเวอร์ชัน alpha แต่ก็ได้การพัฒนาที่ในเรื่องของการใช้งานที่ง่ายขึ้น อย่างการแยก createApp ออกมาเป็น API ที่นำไปใช้ได้ รวมถึง Vue Composition API และยังสามารถประกาศ Tag บน Template กี่อันก็ได้ ทำให้เพิ่มความสนุกไม่น้อย

สำหรับใครที่อยากติดตามข่าวสาร Vue.js และหาเพื่อนชาว Vue สามารถติดตามได้จาก Facebook Group ของ Vue.js Thailand ได้เลยครับ

References

--

--