0Pricing
React Academy · درس

قراءة localStorage والكتابة فيه في React

يمكنكم الوصول بأمان إلى localStorage في خطافات React، والتعامل مع بيئات SSR، وتسلسل الحالة المعقدة.

قراءة localStorage والكتابة فيه في React درس مجاني في React Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.

واجهة برمجة التطبيقات localStorage

يُعد localStorage مخزنًا مضمّنًا في المتصفح، ويحتوي على أربع طرق أساسية: setItem(key, value) وgetItem(key) وremoveItem(key) وclear(). وتبقى البيانات محفوظة عبر إعادة تحميل الصفحة وإعادة تشغيل المتصفح.

يوجد localStorage على الكائن window، ويكون نطاقه حسب الأصل، أي إن لكل نطاق تخزينًا معزولًا خاصًا به.

إنه متزامن ويحجب التنفيذ

يُنفّذ كل استدعاء إلى localStorage بشكل متزامن في الخيط الرئيسي. وقد تؤدي قراءة كميات كبيرة من البيانات أو كتابتها إلى حجب الرسم وجعل واجهة المستخدم متقطعة.

لذلك، احرصوا على إبقاء القيم المخزنة صغيرة، وتجنبوا الكتابة عند كل ضغطة مفتاح أو حدث تمرير.

إنه يخزن السلاسل النصية فقط

لا يستطيع localStorage تخزين سوى السلاسل النصية. ولتخزين كائن أو مصفوفة، يجب إجراء تسلسل لها أولًا باستخدام JSON.stringify(value) قبل استدعاء setItem.

إذا خزّنتم قيمة غير نصية مباشرة، فسيجري تحويلها تلقائيًا، ولذلك يتحول الكائن إلى السلسلة غير المفيدة [object Object].

التحليل مع معالجة الأخطاء

عند القراءة، تستدعون JSON.parse(localStorage.getItem(key))، لكن قد يثير التحليل استثناءً إذا كانت السلسلة المخزنة تالفة أو قد كتبها مصدر آخر.

ضعوا عملية التحليل داخل try/catch، واستخدموا قيمة افتراضية بديلة حتى لا تؤدي قيمة تالفة إلى تعطيل المكوّن.

التحقق من الإتاحة

لا يمكن استخدام localStorage دائمًا: فأثناء العرض على الخادم لا يكون window موجودًا، وقد تثير بعض أوضاع التصفح الخاص استثناءً عند الكتابة. احموا الوصول إليه باستخدام فحص للميزة.

يتمثل الاختبار الآمن في استخدام try/catch لتعيين مفتاح وهمي وإزالته، مع إرجاع false إذا أُثير استثناء.

حد السعة البالغ نحو 5MB

تضع معظم المتصفحات حدًا يقارب خمسة ميغابايت لـ localStorage لكل origin. ويؤدي تجاوز هذا الحد إلى طرح QuotaExceededError عند الكتابة.

لذلك يناسب localStorage البيانات الصغيرة، لكنه خيار غير مناسب للصور أو مجموعات البيانات الكبيرة أو استجابات API المخزنة مؤقتًا.

البيانات المناسبة

تشمل الخيارات المناسبة الأجزاء الصغيرة وغير الحساسة من حالة واجهة المستخدم والمستخدم، مثل تفضيل السمة، وحالة طي الشريط الجانبي، وآخر عوامل التصفية المستخدمة، واللافتات التي أخفيتموها، ومسودات النماذج غير المحفوظة.

وهي قيم تريدون أن تبقى بعد إعادة التحميل، لكنها لا تحتاج إلى طلب ذهابًا وإيابًا إلى الخادم.

البيانات غير المناسبة

تجنبوا تخزين الأسرار مثل الرموز المميزة أو كلمات المرور، لأن أي script في الصفحة يمكنه قراءة localStorage، مما يجعله عرضة لهجمات XSS. وتجنبوا أيضًا الكائنات الكبيرة وحالة الخادم المعتمدة.

ينبغي وضع بيانات المصادقة الحساسة في cookies تحمل السمة httpOnly، بينما ينبغي وضع البيانات الأساسية على الخادم.

مقارنة localStorage وsessionStorage

يشترك كلاهما في واجهة API نفسها، لكن يتم مسح sessionStorage عند إغلاق علامة التبويب، ولا تتم مشاركته بين علامات التبويب. أما localStorage فيستمر إلى أجل غير محدد، وتتم مشاركته بين جميع علامات التبويب ذات origin نفسه.

اختاروا sessionStorage للبيانات قصيرة الأجل الخاصة بعلامة تبويب معينة، وlocalStorage للتفضيلات الدائمة.

مقارنة ملفات تعريف الارتباط وIndexedDB

ملفات تعريف الارتباط صغيرة وتُرسل مع كل طلب HTTP، مما يجعلها مناسبة للمصادقة، لكنه يهدر النطاق الترددي عند استخدامها للبيانات العامة. أما IndexedDB فهي قاعدة بيانات غير متزامنة للبيانات الكبيرة والمنظمة، وتتجاوز حد 5MB بكثير.

اختاروا ملفات تعريف الارتباط للمصادقة التي يقرأها الخادم، وlocalStorage لتفضيلات العميل الصغيرة، وIndexedDB للبيانات الكبيرة أو المعقدة.

نمط بسيط للقراءة والكتابة

تكتب دالة المساعدة الدنيا باستخدام localStorage.setItem(key, JSON.stringify(value))، وتقرأ باستخدام try/catch محمي يحيط بـ JSON.parse(localStorage.getItem(key))، مع إرجاع قيمة افتراضية عند الفشل.

يُبقي هذا الغلاف الصغير عملية التسلسل ومعالجة الأخطاء في مكان واحد.

تحقق سريع

اختبروا مدى فهمكم لأنواع بيانات localStorage.

مراجعة

تعلمتم واجهة API الخاصة بـ localStorage، وأنها متزامنة ولا تتعامل إلا مع السلاسل النصية، وأن سعتها تقترب من 5MB، كما تعلمتم كيفية التحليل بأمان والتحقق من التوفر في SSR ووضع التصفح الخاص.

وقارنتم أيضًا بينه وبين sessionStorage وملفات تعريف الارتباط وIndexedDB لاختيار مخزن البيانات المناسب.

الأسئلة الشائعة

هل درس «قراءة localStorage والكتابة فيه في React» مجاني؟

نعم — نص درس «قراءة localStorage والكتابة فيه في React» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.

ماذا ستتعلم في «قراءة localStorage والكتابة فيه في React»؟

يمكنكم الوصول بأمان إلى localStorage في خطافات React، والتعامل مع بيئات SSR، وتسلسل الحالة المعقدة. تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟

لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «قراءة localStorage والكتابة فيه في React»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟

نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. قراءة localStorage والكتابة فيه في React
  2. مزامنة الحالة مع localStorage
  3. التعامل مع أحداث التخزين بين علامات التبويب
  4. sessionStorage وIndexedDB واختيار واجهة API المناسبة
← العودة إلى React Academy