📋 محتويات الصفحة
📖 الوصف
Pinia هي المكتبة الرسمية لإدارة الحالة في Vue.js (بديل Vuex). توفر API بسيط ومباشر مع دعم كامل لـ TypeScript. تدعم Composition API و Options API. Pinia تتميز ببساطة الـ setup (لا mutations، لا commit) و autocomplete كامل. تدعم devtools، plugins، و SSR. أصبحت الاختيار الرسمي لـ Vue 3.
🎯 يستخدم في
مجالات استخدام هذه الأداة
State management في تطبيقات Vue
State sharing بين components
State persistence في localStorage
Applications مع complex state
Enterprise applications بـ Vue
✨ المميزات
أبرز مميزات هذه الأداة
API بسيط جداً (لا mutations/commit)
TypeScript inference ممتاز
DevTools integration كامل
Plugins system (persistence
etc.)
Actions (sync و async)
Getters (computed properties)
SSR support
Modular stores (لا central store واحد)
⚠️ العيوب
نقاط يجب مراعاتها
محدود لـ Vue
أصغر ecosystem من Redux
أقل middleware من Redux
قد يكون صعب للمبتدئين
أقل شهرة من Vuex ( legacy)
🔄 البدائل
أدوات بديلة يمكنك استخدامها
💻 مثال على الاستخدام
كيفية استخدام هذه الأداة
// stores/counter.ts
import { defineStore } from 'pinia';
import { ref, computed } from 'vue';
export const useCounterStore = defineStore('counter', () => {
// State
const count = ref(0);
// Getters
const doubled = computed(() => count.value * 2);
// Actions
function increment() {
count.value++;
}
async function fetchCount() {
const response = await fetch('/api/counter');
count.value = await response.json();
}
return { count, doubled, increment, fetchCount };
});
// Option API style
export const useCartStore = defineStore('cart', {
state: () => ({
items: [] as CartItem[],
}),
getters: {
totalPrice: (state) => state.items.reduce((sum, item) => sum + item.price, 0),
},
actions: {
addItem(item: CartItem) {
this.items.push(item);
},
},
});
//.vue component
<template>
<div>
<p>العدد: {{ counter.count }}</p>
<p>المضاعف: {{ counter.doubled }}</p>
<button @click="counter.increment">زيادة</button>
</div>
</template>
<script setup lang="ts">
import { useCounterStore } from '@/stores/counter';
import { storeToRefs } from 'pinia';
const counter = useCounterStore();
// With storeToRefs for reactivity
const { count, doubled } = storeToRefs(counter);
</script>
📚 أدوات أخرى في State-Management
قد يعجبك أيضاً
Effector
مكتبة إدارة حالة reactive (Reactive State Management)
Jotai
⭐مكتبة إدارة حالة ذرية (Atomic State Management)
MobX
⭐مكتبة إدارة حالة تفاعلية (Reactive State Management)
Nano Stores
مكتبة إدارة حالة خفيفة (Tiny State Manager)
NgRx
⭐مكتبة إدارة الحالة لـ Angular (Angular State Management)
Recoil
⭐مكتبة إدارة حالة ذرية (Atomic State Management)