vuex vs pinia

Vuex

https://vuex.vuejs.org

npm install vuex
// 또는
yarn add vuex

Store 생성: 애플리케이션의 전역 상태를 저장하는 Vuex Store를 생성합니다.

// store/index.js

import { createStore } from 'vuex';

export default createStore({
  state: {
    // 전역 상태
  },
  mutations: {
    // 상태 변경 메서드
  },
  actions: {
    // 비동기 작업 처리 메서드
  },
  getters: {
    // 상태를 계산하는 메서드
  }
});

Vue 애플리케이션에 Store 적용: 생성한 Store를 Vue 애플리케이션에 적용합니다.

// main.js 또는 App.vue

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

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

컴포넌트에서 상태 사용: Vuex 상태를 컴포넌트에서 사용할 수 있습니다.

<template>
  <div>{{ count }}</div>
</template>

<script>
export default {
  computed: {
    count() {
      return this.$store.state.count;
    }
  }
}
</script>
// store/index.js

mutations: {
  increment(state) {
    state.count++;
  }
},
actions: {
  asyncIncrement(context) {
    setTimeout(() => {
      context.commit('increment');
    }, 1000);
  }
}

Pinia

https://pinia.vuejs.org

npm install pinia
// 또는
yarn add pinia
import { createPinia } from 'pinia';
import { createApp } from 'vue';
import App from './App.vue';

const app = createApp(App);

// Pinia를 앱에 사용
const pinia = createPinia();
app.use(pinia);

app.mount('#app');
import { defineStore } from 'pinia';

export const useCounterStore = defineStore('counter', {
  state: () => ({
    count: 0,
  }),
  actions: {
    increment() {
      this.count++;
    },
  },
});
<template>
  <div>{{ count }}</div>
  <button @click="increment">Increment</button>
</template>

<script>
import { defineComponent } from 'vue';
import { useCounterStore } from './store';

export default defineComponent({
  setup() {
    const store = useCounterStore();
    return {
      count: store.count,
      increment: store.increment,
    };
  },
});
</script>

vuex vs pinia

Loading

Leave a Reply

Your email address will not be published. Required fields are marked *