Nuxt.js Fundamental ตอนที่ 7 - การใช้งานร่วมกับ Vuex Store
เนื้อหาของบทเรียน Nuxt.js
- ตอนที่ 1 - Getting Started with Nuxt.js
- ตอนที่ 2 - สร้าง Nuxt.js ด้วย create-nuxt-app
- ตอนที่ 3 - การกำหนด Routing
- ตอนที่ 4 - Nuxt.js Concept
- ตอนที่ 5 - Nuxt Content และ Async Data
- ตอนที่ 6 - การดึงข้อมูลจาก APIs
- ตอนที่ 7 - การใช้งานร่วมกับ Vuex Store
- ตอนที่ 8 - ทำระบบ Authentication ด้วย Nuxt.js
- ตอนที่ 9 - การ Deploy Nuxt.js
- ตอนที่ 10 - การทำ Internal API และ Middleware
- ตอนที่ 11 - ทำ SEO และ Meta tags
- ตอนที่ 12 - Workshop
มาถึงเรื่องการเก็บข้อมูลลง Store โดยใช้ Vuex กันบ้างครับ ตัว Nuxt.js ก็รองรับการใช้งาน Vuex เลย (default จะ disable) หากเราต้องการใช้งาน ก็แค่เพิ่มไฟล์ index.js
ใน folder store
ก็ได้แล้ว
โดย Vuex รองรับทั้งแบบ 1. ธรรมดา และ 2. แบบ modules โดยหลักการทำงานของ Nuxt Vuex คือ
- Nuxt.js จะมองหาไฟล์ใน
store
ถ้ามี - จะทำการ
import 'vuex'
ให้อัตโนมัติ - เพิ่ม
store
ลงใน Vue instance.
state
ควรจะเป็น function นะครับ เพื่อหลีกเลี่ยงปัญหา share state กับ server
ตัวอย่างเช่นไฟล์ store/index.js
เรามี state
เก็บค่า counter
และมี mutation
ชื่อ increment
สำหรับเพิ่มค่า counter ใน state
ตัวอย่าง vuex เวลาส่องใน Vue DevTools (ปกติใครเขียน Vue.js ก็ควรมีติด browser ไว้นะครับ)
สำหรับใครยังไม่เคยใช้ Vue DevTools สามารถดาวน์โหลดได้จาก Vue Devtools
Modules Mode
ปกติตัว Nuxt จะทำเป็น modules mode ให้เราอยู่แล้ว ตามชื่อไฟล์ หรือ folder เป็น namespaced
ให้เรา เช่น เราสร้างไฟล์ store/todos.js
จะได้ store เทียบเท่ากับการใช้ Vuex ปกติคือ
และไฟล์ pages/todos.vue
แบบนี้
Source Code จาก Nuxt Vuex Store
- จากตัวอย่างโค๊ด จะเห็นว่า เราสามารถใช้ Vuex ได้แบบปกติใน Nuxt.js เลยไม่ต้องทำอะไรเลย เพียงแค่สร้างไฟล์ใน
store
ปกติครับ - ตัวอย่าง
mapMutations
คือการ map function ในmutations
ให้เราเรียกผ่านthis.toggle(value)
ได้เลย
และสำหรับใครที่อยากรู้เรื่อง Vuex เพิ่มเติม แนะนำให้อ่าน Vuex Doc เพิ่มเติมนะครับ
ตัวอย่างการสร้างหลายๆ Modules
ตัวอย่างเช่น ผมมี vues 3 modules คือ
- auth
- users
- posts
ทีนี้ ผมจะแยก เป็น folder และใน folder ผมก็จะแยก state.js
, mutations.js
, actions.js
และมี index.js
เพื่อรวมเป็น module อีกที แบบนี้
และตัวอย่างแต่ละไฟล์ ประมาณนี้ครับ เช่น
ไฟล์ store/auth/state.js
ไฟล์ store/auth/mutations.js
ไฟล์ store/auth/actions.js
หรืออย่างไฟล์ store/auth/getters.js
หากเราอยากใช้ getters
และเวลาเราใช้งาน แต่ละ modules ในหน้า pages เราใช้ mapActions
และ mapGetters
ก็จะได้หน้าตาประมาณนี้
Hints & Questions?
เพื่อนๆ ลองนำ Vuex ไปประยุกต์กับเรื่องการ Fetch API จากตอนที่แล้วกันดูนะครับ โดย
- สร้าง state สำหรับเก็บข้อมูล photos ที่ได้จาก API
- เมื่อได้ข้อมูลก็ใช้ให้
actions
หรือmutation
อัพเดทค่าใน state - ใช้
mapState
,mapActions
ของ Vuex Helpers มาช่วย
อ่านบทถัดไป 👉 ตอนที่ 8 - ทำระบบ Authentication ด้วย Nuxt.js
- Authors
-
Chai Phonbopit
เป็น Web Dev ในบริษัทแห่งหนึ่ง ทำงานมา 10 ปีกว่าๆ ด้วยภาษาและเทคโนโลยี เช่น JavaScript, Node.js, React, Vue และปัจจุบันกำลังสนใจในเรื่องของ Blockchain และ Crypto กำลังหัดเรียนภาษา Rust