حفظ البيانات باستخدام localStorage
5:00 دقائق
مجاني
في هذا الدرس سنحفظ بيانات التطبيق داخل المتصفح باستخدام localStorage
في المشروع السابق، عند تحديث الصفحة تختفي المهام. السبب: البيانات موجودة في الذاكرة فقط. الحل: استخدام localStorage لحفظ البيانات داخل المتصفح.
ما هو localStorage؟
localStorage هو مساحة تخزين داخل المتصفح:
- يحفظ البيانات حتى بعد إغلاق المتصفح
- لا يحتاج سيرفر
- يخزن نصوص فقط (Strings)
سنحوّل البيانات إلى نص باستخدام JSON.
أساسيات localStorage
// حفظ قيمة
localStorage.setItem("name", "Ahmed");
// قراءة قيمة
let value = localStorage.getItem("name");
// حذف مفتاح
localStorage.removeItem("name");
// مسح كل التخزين
localStorage.clear();
لكن هذه القيم نصية فقط… ماذا عن المصفوفات والكائنات؟
تحويل البيانات باستخدام JSON
let tasks = [
{ text: "مهمة 1", done: false },
{ text: "مهمة 2", done: true }
];
// تحويل إلى نص
let json = JSON.stringify(tasks);
// إرجاعها إلى كائن
let data = JSON.parse(json);
سنستخدم stringify للحفظ وparse للقراءة.
ربط localStorage بمشروع To-Do List
سنضيف دالتين:
- saveTasks — لحفظ المهام
- loadTasks — لتحميل المهام
دوال الحفظ والتحميل
function saveTasks() {
localStorage.setItem("tasks", JSON.stringify(tasks));
}
function loadTasks() {
const saved = localStorage.getItem("tasks");
if (saved) {
tasks = JSON.parse(saved);
}
}
لاحظ أننا استخدمنا نفس المفتاح "tasks".
تعديل render لحفظ البيانات تلقائيًا
function render() {
taskList.innerHTML = "";
totalCount.textContent = tasks.length;
doneCount.textContent = tasks.filter(t => t.done).length;
tasks.forEach(function (task, index) {
// (نفس كود إنشاء العناصر)
});
// احفظ بعد كل تحديث
saveTasks();
}
الآن أي تغيير يتم حفظه تلقائيًا.
تحميل البيانات عند فتح الصفحة
document.addEventListener("DOMContentLoaded", function () {
loadTasks();
render();
});
النتيجة: المهام تبقى محفوظة حتى بعد تحديث الصفحة 🔥
أخطاء شائعة مع localStorage
- نسيان JSON.stringify قبل الحفظ
- نسيان JSON.parse عند القراءة
- استخدام مفاتيح مختلفة لنفس البيانات
- عدم التحقق من وجود بيانات محفوظة
تطويرات مقترحة
- إضافة تاريخ إنشاء لكل مهمة
- زر لمسح كل المهام
- فلترة المهام (الكل / المنتهي / غير المنتهي)
- تخزين الإعدادات (الوضع الليلي مثلًا)
ماذا بعد هذا الدرس؟
الدرس القادم: التعامل مع الوقت والتواريخ ⏱️
سنتعلم Date و setTimeout و setInterval بأمثلة عملية.