🔄 مميز

Pinia

مكتبة إدارة الحالة الرسمية لـ Vue (Vue State Management)

(5/5)
👁️ 4 مشاهدة
📅 02 Jul 2026
💚 Vue.js

مستوى الخبرة المطلوب:

🌱 مبتدئ ⚡ متوسط 🚀 محترف 🏢 مؤسسي
🔗 زيارة الموقع الرسمي
5
تقييم المستخدمين
التصنيف 🔄 State-Management
المشاهدات 4
تاريخ الإضافة 02/07/2026
آخر تحديث 02/07/2026

📖 الوصف

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)

🔄 البدائل

أدوات بديلة يمكنك استخدامها

Vuex
Redux Toolkit
Native Vue reactivity

💻 مثال على الاستخدام

كيفية استخدام هذه الأداة

Example Code
// 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

قد يعجبك أيضاً