๐ Integrasi Pinia dengan Vue.js
Pinia adalah state management library resmi untuk Vue 3. Dibanding Vuex, Pinia lebih ringan, mudah digunakan, dan mendukung TypeScript secara native.
๐ค Mengapa Pinia?โ
- API sederhana dan mirip
setup()
- TypeScript-ready tanpa konfigurasi tambahan
- Terintegrasi penuh dengan Devtools
- Bisa digunakan di dalam Composition API dan Options API
๐ 1. Instalasi Piniaโ
npm install pinia
Jika menggunakan Vue Router:
npm install vue-router
โ๏ธ 2. Inisialisasi Piniaโ
a. File: main.ts
โ
import { createApp } from 'vue';
import App from './App.vue';
import { createPinia } from 'pinia';
const app = createApp(App);
const pinia = createPinia();
app.use(pinia);
app.mount('#app');
๐งฑ 3. Membuat Storeโ
a. File: stores/counter.tsโ
import { defineStore } from 'pinia';
export const useCounterStore = defineStore('counter', {
state: () => ({
count: 0
}),
getters: {
doubleCount: (state) => state.count * 2
},
actions: {
increment() {
this.count++;
}
}
});
'counter'
adalah nama unik store โ digunakan dalam Devtools dan debugging.
๐งโ๐ป 4. Menggunakan Store dalam Komponenโ
a. Options API (Vue 3)โ
<template>
<div>
<p>Count: {{ counter.count }}</p>
<button @click="counter.increment()">Tambah</button>
</div>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import { useCounterStore } from '@/stores/counter';
export default defineComponent({
setup() {
const counter = useCounterStore();
return { counter };
}
});
</script>
๐ 5. Reaktivitas Otomatisโ
Pinia store bersifat reaktif:
-
Perubahan langsung terpantau di template
-
Bisa digunakan di berbagai komponen tanpa prop drilling
๐งช 6. Pinia + TypeScriptโ
Semua property dan method sudah memiliki intellisense otomatis.
counter.count // โ
typed number
counter.increment() // โ
typed function
counter.doubleCount // โ
typed getter
๐ 7. Struktur Direktori Disarankanโ
src/
โโโ stores/
โ โโโ counter.ts
โโโ components/
โโโ App.vue
โโโ main.ts
๐งฉ 8. Modular Storeโ
Buat satu store untuk satu fitur:
-
auth.ts
โ login, token -
cart.ts
โ keranjang belanja -
product.ts
โ daftar produk -
settings.ts
โ preferensi UI
๐ง 9. Ekstensi & Plugin Pinia
- Persisted State:
npm install pinia-plugin-persistedstate
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate';
pinia.use(piniaPluginPersistedstate);
- Devtools Support: Pinia langsung tampil di Vue Devtools