Pulsy هي مكتبة إدارة حالة خفيفة الوزن ومرنة وسهلة الاستخدام لـ React توفر ميزات مثل المثابرة والبرامج الوسيطة والحفظ والمخازن المحسوبة والمؤلفة والسفر عبر الزمن وتكامل DevTools. يساعدك على إدارة الحالة العالمية بكفاءة في تطبيقات React دون تعقيدات غير ضرورية.
npm install pulsy # or yarn add pulsy
يمكن تكوين Pulsy عالميًا لتمكين DevTools والحفظ الافتراضي والثبات وخطافات رد الاتصال لإنشاء المتجر وتحديثاته.
import { configurePulsy } from 'pulsy'; configurePulsy({ enableDevTools: process.env.NODE_ENV === 'development', persist: true, // Globally enable persistence by default defaultMemoize: true, // Enable memoization for all stores by default onStoreCreate: (name, initialValue) => console.log(`Store "${name}" created! Initial value:`, initialValue), onStoreUpdate: (name, newValue) => console.log(`Store "${name}" updated! New value:`, newValue), });
لإنشاء متجر، استخدم وظيفة createStore. يحمل المتجر الحالة العالمية ويمكن استخدامه في أي مكان في تطبيق React الخاص بك.
import { createStore } from 'pulsy'; // Create a store named 'counter' with an initial value of 0 createStore('counter', 0);
يوفر Pulsy خطاف usePulsy للوصول إلى قيمة المتجر وتحديثها في مكونات React الخاصة بك. لنقم بإنشاء مكون عداد:
import usePulsy from 'pulsy'; function CounterComponent() { const [count, setCount] = usePulsy('counter'); const increment = () => setCount((prev) => prev 1); return ( ); } export default CounterComponent;Current Count: {count}
يُسهل Pulsy الاحتفاظ بقيم المتجر في localStorage أو أي نظام تخزين مخصص آخر. ما عليك سوى تمرير خيار الاستمرار عند إنشاء المتجر.
createStore('counter', 0, { persist: true });
ستستمر الآن قيمة المتجر المضاد عبر عمليات إعادة تحميل الصفحة.
يمكنك أيضًا تكوين Pulsy لاستخدام وحدة تخزين مخصصة، مثل sessionStorage أو أي محرك تخزين آخر يقوم بتنفيذ واجهة التخزين:
createStore('sessionCounter', 0, { persist: { storage: sessionStorage, // Use sessionStorage instead of localStorage serialize: (value) => JSON.stringify(value), deserialize: (value) => JSON.parse(value), }, });
سيؤدي هذا إلى تخزين عداد الجلسة في مساحة تخزين الجلسة.
تسمح لك البرامج الوسيطة باعتراض تحديثات المتجر وتعديلها قبل الالتزام بها. يمكنك إضافة برمجيات وسيطة عند إنشاء متجر، أو لاحقًا باستخدام addMiddleware.
const loggingMiddleware = (nextValue, prevValue, storeName) => { console.log(`[${storeName}] changed from ${prevValue} to ${nextValue}`); return nextValue; }; createStore('counter', 0, { middleware: [loggingMiddleware] });
في هذا المثال، تسجل البرامج الوسيطة كل تغيير في الحالة في المتجر المضاد.
يدعم Pulsy البرامج الوسيطة غير المتزامنة للتعامل مع المهام غير المتزامنة مثل مكالمات API:
const asyncMiddleware = async (nextValue, prevValue, storeName) => { console.log(`Fetching data before updating ${storeName}...`); const data = await fetch('https://api.example.com/data').then((res) => res.json()); return nextValue data.amount; }; createStore('counter', 0, { middleware: [asyncMiddleware] });
في هذا المثال، تقوم البرامج الوسيطة بجلب بعض البيانات من واجهة برمجة التطبيقات (API) قبل تحديث المتجر.
يتيح لك Pulsy إدارة سجل الحالة باستخدام خطاف useTimeTravel، مما يتيح لك القدرة على التراجع عن تغييرات الحالة وإعادتها.
import { useTimeTravel } from 'pulsy'; function TimeTravelCounter() { const [count, setCount, undo, redo] = useTimeTravel('counter'); return ( ); }Count: {count}
يمكنك الوصول إلى السجل الكامل لتغييرات الحالة باستخدام HistoryRef المقدم من useTimeTravel:
function HistoryCounter() { const [count, setCount, undo, redo, history] = useTimeTravel('counter'); return ( ); }Count: {count}
History: {history.join(', ')}
تستمد المتاجر المحسوبة حالتها من المتاجر الأخرى. يتيح لك Pulsy إنشاء متاجر تعتمد قيمها على متجر واحد أو أكثر.
import { createComputedStore } from 'pulsy'; createComputedStore('doubleCounter', () => { const counter = getStoreValue('counter'); return counter * 2; }, ['counter']);
هنا، يتم تحديث doubleCounter تلقائيًا كلما تغير متجر العداد.
يمكنك الآن الوصول إلى المتجر المحسوب تمامًا مثل المتجر العادي:
function DoubleCounterComponent() { const [doubleCount] = usePulsy('doubleCounter'); return ( ); }Double Counter: {doubleCount}
يدعم Pulsy إنشاء متاجر متعددة في متجر واحد. وهذا مفيد بشكل خاص لإدارة الحالة المعقدة من خلال تجميع الأجزاء ذات الصلة من الحالة معًا.
import { composeStores } from 'pulsy'; const [getComposedStore, setComposedStore] = composeStores('userProfile', { username: 'userNameStore', age: 'ageStore', }); const UserProfileComponent = () => { const userProfile = getComposedStore(); return (); };Username: {userProfile.username}
Age: {userProfile.age}
يمكنك أيضًا تحديث أجزاء معينة من المتجر المؤلف باستخدام وظيفة setComposeStore:
setComposedStore({ username: 'newUsername', });
يتيح لك Pulsy إنشاء متاجر ذات مساحات أسماء للحفاظ على تنظيم المتاجر ذات الصلة وتجنب تضارب الأسماء في التطبيقات الكبيرة.
import { createNamespacedStore } from 'pulsy'; // Create a namespaced store for user-related data const useUserStore = createNamespacedStore('user'); function UserComponent() { const [username, setUsername] = useUserStore('username'); return ( ); }Username: {username}
هنا، يتم تجميع جميع المتاجر ذات الصلة بالمستخدم (على سبيل المثال، المستخدم: اسم المستخدم، المستخدم: العمر) ضمن مساحة اسم المستخدم.
يتكامل Pulsy مع أدوات تطوير المتصفح للمساعدة في تتبع تحديثات المتجر وتصحيحها. عند تمكين DevTools، سترى سجلات حول تحديثات المتجر وتغييرات الحالة وقياسات الأداء في وحدة التحكم الخاصة بك.
configurePulsy({ enableDevTools: true, // Logs detailed store activity to the console });
يسجل Pulsy معلومات مفيدة مثل وقت إنشاء المتجر أو تحديثه، وتنفيذ البرامج الوسيطة، وإجراءات السفر عبر الزمن في وضع التطوير.
دعونا ندمج ميزات Pulsy المتعددة في مثال واحد.
import { createStore, usePulsy, configurePulsy } from 'pulsy'; // Global configuration configurePulsy({ enableDevTools: true, persist: true, }); // Middleware to log store updates const loggingMiddleware = (nextValue, prevValue, storeName) => { console.log(`Store ${storeName} updated from ${prevValue} to ${nextValue}`); return nextValue; }; // Create a store for user profile createStore('userProfile', { username: 'guest', age: 25, }, { middleware: [loggingMiddleware], persist: true }); // Component to manage user profile function UserProfileComponent() { const [userProfile, setUserProfile] = usePulsy('userProfile'); const updateUsername = () => { setUserProfile((prevProfile) => ({ ...prevProfile, username: 'newUsername', })); }; return (); } export default UserProfileComponent;Username: {userProfile.username}
Age: {userProfile.age}
في هذا المثال، يتم الاحتفاظ بمخزن userProfile، ويتم تسجيله بواسطة البرامج الوسيطة، ويمكن الوصول إليه عبر الخطاف usePulsy. يعرض UserProfileComponent المتجر ويحدثه في واجهة مستخدم بسيطة.
Pulsy هي مكتبة إدارة حالة قوية ومرنة لـ React توفر دعمًا جاهزًا للاستمرارية والبرامج الوسيطة والمتاجر المحسوبة والسفر عبر الزمن وأدوات التطوير. واجهة برمجة التطبيقات البسيطة ومجموعة واسعة من الميزات تجعلها مناسبة لكل من التطبيقات الصغيرة والكبيرة الحجم.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3