본문으로 건너뛰기

เนื้อหาภาษาไทย / 태국어 콘텐츠

시스템 가이드 검수 완료된 콘텐츠

การจัดการ State ด้วย Vuex ในแอปพลิเคชันที่ซับซ้อน

Vuex เป็น State Management Library สำหรับ Vue.js ที่ช่วยจัดการข้อมูล (State) ในแอปพลิเคชันที่ซับซ้อน โดยใช้แนวคิดของการมี State ส่วนกลาง ทำให้ Component ต่าง ๆ...

1. Vuex คืออะไร?

Vuex เป็น State Management Library สำหรับ Vue.js ที่ช่วยจัดการข้อมูล (State) ในแอปพลิเคชันที่ซับซ้อน โดยใช้แนวคิดของการมี State ส่วนกลาง ทำให้ Component ต่าง ๆ สามารถแชร์และจัดการข้อมูลร่วมกันได้อย่างมีประสิทธิภาพ


2. แนวคิดหลักของ Vuex

Vuex ประกอบด้วยส่วนหลักดังนี้:

  • State: พื้นที่เก็บข้อมูลที่ใช้ร่วมกัน
  • Getters: ฟังก์ชันที่ใช้ดึงข้อมูลจาก State
  • Mutations: ฟังก์ชันที่เปลี่ยนแปลงค่าใน State (Synchronous)
  • Actions: ฟังก์ชันที่ใช้เรียก Mutations (รองรับ Asynchronous)
  • Modules: ใช้สำหรับแยก State และการจัดการออกเป็นส่วน ๆ เพื่อเพิ่มความยืดหยุ่น

3. การติดตั้ง Vuex

การติดตั้งผ่าน npm หรือ yarn

npm install vuex

4. การตั้งค่า Vuex Store

ตัวอย่างการสร้าง Store:

// store/index.js
import { createStore } from 'vuex';

const store = createStore({
  state() {
    return {
      count: 0
    };
  },
  mutations: {
    increment(state) {
      state.count++;
    },
    decrement(state) {
      state.count--;
    }
  },
  actions: {
    incrementAsync({ commit }) {
      setTimeout(() => {
        commit('increment');
      }, 1000);
    }
  },
  getters: {
    doubleCount(state) {
      return state.count * 2;
    }
  }
});

export default store;

การเพิ่ม Store ในโปรเจกต์

// main.js
import { createApp } from 'vue';
import App from './App.vue';
import store from './store';

const app = createApp(App);
app.use(store);
app.mount('#app');

5. การใช้งาน Vuex ใน Component

การอ่านค่า State

<template>
  <div>
    <p>Count: {{ $store.state.count }}</p>
  </div>
</template>

การเปลี่ยนค่า State ด้วย Mutations

<template>
  <div>
    <p>Count: {{ $store.state.count }}</p>
    <button @click="$store.commit('increment')">Increment</button>
    <button @click="$store.commit('decrement')">Decrement</button>
  </div>
</template>

การใช้ Actions

<template>
  <div>
    <p>Count: {{ $store.state.count }}</p>
    <button @click="$store.dispatch('incrementAsync')">Increment After 1 Second</button>
  </div>
</template>

การใช้ Getters

<template>
  <div>
    <p>Double Count: {{ $store.getters.doubleCount }}</p>
  </div>
</template>

6. การจัดการ State ที่ซับซ้อนด้วย Modules

การสร้าง Module:

// store/modules/counter.js
const counterModule = {
  state() {
    return {
      count: 0
    };
  },
  mutations: {
    increment(state) {
      state.count++;
    },
    decrement(state) {
      state.count--;
    }
  },
  actions: {
    incrementAsync({ commit }) {
      setTimeout(() => {
        commit('increment');
      }, 1000);
    }
  },
  getters: {
    doubleCount(state) {
      return state.count * 2;
    }
  }
};

export default counterModule;

การเพิ่ม Module ใน Store:

// store/index.js
import { createStore } from 'vuex';
import counterModule from './modules/counter';

const store = createStore({
  modules: {
    counter: counterModule
  }
});

export default store;

การใช้งาน Module ใน Component:

<template>
  <div>
    <p>Count: {{ $store.state.counter.count }}</p>
    <button @click="$store.commit('counter/increment')">Increment</button>
    <button @click="$store.commit('counter/decrement')">Decrement</button>
  </div>
</template>

7. การใช้ Plugins ร่วมกับ Vuex

Vuex รองรับการเพิ่ม Plugins เพื่อขยายความสามารถ เช่น การบันทึก State ลง LocalStorage หรือการ Debug

ตัวอย่างการสร้าง Plugin:

const myPlugin = store => {
  store.subscribe((mutation, state) => {
    console.log('Mutation:', mutation);
    console.log('State after mutation:', state);
  });
};

export default myPlugin;

การเพิ่ม Plugin ใน Store:

import myPlugin from './plugins/myPlugin';

const store = createStore({
  state() {
    return {
      count: 0
    };
  },
  plugins: [myPlugin]
});

8. สรุป

ในบทนี้ คุณได้เรียนรู้เกี่ยวกับ:

  • การตั้งค่าและใช้งาน Vuex Store
  • การจัดการ State, Mutations, Actions, และ Getters
  • การจัดการ State ที่ซับซ้อนด้วย Modules
  • การขยายความสามารถของ Vuex ด้วย Plugins

ในบทถัดไป เราจะศึกษาการใช้งาน Vue Test Utils เพื่อทดสอบ Component และ State!

Office.in.th Custom Service

이 구조를 바탕으로 시스템을 개발하거나 맞춤 변경하고 싶으신가요?

Office.in.th는 엔터프라이즈 웹 애플리케이션, API 연동, 공공/민간 업무 관리 시스템을 설계·개발하며 장기 지원을 제공합니다.

소프트웨어 개발 서비스 보기