Lewati ke konten utama

๐Ÿ 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