Gereksinimler ve Ön Hazırlık
Projeye başlamadan önce modern bir tarayıcı (Chrome, Firefox veya Edge) ve bir kod editörü (VS Code önerilir) yeterlidir. Javascript kodlarımızı ES6+ standartlarında yazacağız; bu nedenle güncel sözdizimlerini kullanacağız.
- HTML5: Uygulamanın iskeletini oluşturmak için.
- CSS3: Arayüzün görselleştirilmesi için.
- LocalStorage API: Verilerin tarayıcıda kalıcı olarak saklanması için.
- ES6+ Javascript: Mantıksal işlemler ve DOM yönetimi için.
Dosya yapınızı index.html, style.css ve app.js şeklinde oluşturarak başlayabilirsiniz. Bu yapı, kodun okunabilirliğini ve yönetilebilirliğini artıracaktır.
Adım 1: Uygulamanın HTML İskeletini Oluşturma
Dinamik bir uygulama için öncelikle not girişi yapılacak bir alan ve notların listeleneceği bir konteyner oluşturmalıyız. HTML tarafında input, button ve notların ekleneceği bir ul etiketi kullanacağız.
Not Defterim
Ekle
Bu kod bloğu, kullanıcının veri girişi yapabileceği alanı ve bu verilerin dinamik olarak ekleneceği listeyi tanımlar. id değerleri, Javascript tarafında bu elementleri seçmemizi sağlayacaktır.
Adım 2: Javascript ile Not Ekleme Mantığı
Kullanıcı "Ekle" butonuna tıkladığında, girdi alanındaki değeri alıp listeye eklememiz gerekir. Javascript'te addEventListener yöntemini kullanarak butonun tıklanma olayını dinleyeceğiz.
const addBtn = document.getElementById('addBtn');
const noteInput = document.getElementById('noteInput');
const noteList = document.getElementById('noteList');
addBtn.addEventListener('click', () => {
const noteText = noteInput.value;
if (noteText === '') return; // Boş not eklenmesini engelle
const li = document.createElement('li');
li.textContent = noteText;
noteList.appendChild(li);
noteInput.value = ''; // Giriş alanını temizle
});
Bu kod, kullanıcıdan alınan veriyi DOM'a bir liste elemanı olarak ekler. Ancak bu yöntemle notlar sadece o an için ekranda kalır; sayfa yenilendiğinde veriler kaybolur. Bunu çözmek için LocalStorage kullanacağız.
Adım 3: LocalStorage ile Veri Kalıcılığı Sağlama
LocalStorage, tarayıcıda anahtar-değer (key-value) çiftleri şeklinde veri saklamamıza olanak tanır. Notlarımızı bir dizi (array) içerisinde tutup, bu diziyi JSON formatında kaydedeceğiz.
let notes = JSON.parse(localStorage.getItem('myNotes')) || [];
function saveNotes() {
localStorage.setItem('myNotes', JSON.stringify(notes));
}
function renderNotes() {
noteList.innerHTML = '';
notes.forEach((note, index) => {
const li = document.createElement('li');
li.textContent = note;
noteList.appendChild(li);
});
}
Burada JSON.stringify ile diziyi metne çevirip kaydediyoruz, JSON.parse ile ise veriyi geri alırken tekrar diziye dönüştürüyoruz. Bu, verilerin kalıcı olmasını sağlayan en kritik adımdır.
Adım 4: Not Silme ve Etkileşimli Arayüz
Not defterinin etkileşimli olması için eklenen notların silinebilmesi gerekir. Her notun yanına bir silme butonu ekleyerek bu işlemi gerçekleştirebiliriz.
function deleteNote(index) {
notes.splice(index, 1);
saveNotes();
renderNotes();
}
// renderNotes fonksiyonu içinde buton ekleme:
const deleteBtn = document.createElement('button');
deleteBtn.textContent = 'Sil';
deleteBtn.onclick = () => deleteNote(index);
li.appendChild(deleteBtn);
splice metodu, diziden belirli bir indeksteki elemanı silmemizi sağlar. Ardından saveNotes ile güncel durumu LocalStorage'a yazar ve renderNotes ile arayüzü tazeleriz.
Karşılaştırma: Tarayıcı Depolama Yöntemleri
Not defteri uygulamanızda veri saklamak için farklı yöntemler mevcuttur. Aşağıdaki tablo, bu yöntemlerin temel farklarını göstermektedir.
| Yöntem | Kapasite | Kalıcılık | Kullanım Alanı |
|---|---|---|---|
| LocalStorage | ~5MB | Süresiz | Notlar, Ayarlar |
| SessionStorage | ~5MB | Sekme kapanana kadar | Geçici form verileri |
| Cookies | 4KB | Belirlenen süre | Oturum yönetimi |
Güvenlik ve Performans Uyarıları
Kritik Uyarı: Tarayıcı tabanlı depolama (LocalStorage) kullanıcı tarafından manipüle edilebilir. Uygulamanızda hassas veriler (şifre, kişisel kimlik bilgisi vb.) asla LocalStorage üzerinde saklanmamalıdır. Ayrıca, kullanıcıdan alınan verileri DOM'a eklerken
innerHTMLyerinetextContentkullanarak XSS (Cross-Site Scripting) saldırılarına karşı önlem almalısınız.
Sıkça Sorulan Sorular
LocalStorage verileri ne kadar süre saklanır?
LocalStorage verileri, kullanıcı tarayıcı önbelleğini temizleyene veya siz kod ile veriyi silene kadar kalıcıdır.
Uygulamayı nasıl daha gelişmiş hale getirebilirim?
Notlara tarih damgası ekleyebilir, notları kategorize edebilir veya bir "tamamlandı" durumu ekleyerek yapılacaklar listesine dönüştürebilirsiniz.
Neden JSON.stringify kullanıyoruz?
LocalStorage sadece metin (string) verileri saklayabilir. Diziler ve nesneler metin formatına dönüştürülmeden kaydedilemez.
XSS saldırısı nedir ve nasıl korunurum?
XSS, kötü niyetli kodların web sayfanıza enjekte edilmesidir. Kullanıcıdan gelen veriyi doğrudan HTML olarak işlemek yerine textContent kullanarak tarayıcının veriyi sadece metin olarak algılamasını sağlayın.
Bu uygulama mobil cihazlarda çalışır mı?
Evet, yazdığımız Javascript kodları tarayıcı tabanlıdır ve tüm modern mobil tarayıcılarda sorunsuz çalışır. CSS tarafında medya sorguları (media queries) kullanarak tasarımı mobil uyumlu hale getirebilirsiniz.
Uygulama Performansını Optimize Etme ve Hata Ayıklama
Not defteri uygulamanız büyüdükçe, özellikle localStorage üzerinde tutulan veri miktarı arttığında, tarayıcı performansı üzerinde gözle görülür bir yük oluşabilir. Kullanıcı deneyimini korumak için veri okuma ve yazma işlemlerini optimize etmeniz gerekir.
DOM Güncellemelerinde Verimlilik
Her not eklendiğinde veya silindiğinde tüm listeyi DOM'dan silip yeniden oluşturmak (re-rendering) maliyetli bir işlemdir. Bunun yerine, sadece değişen öğeyi hedefleyen bir yapı kurmalısınız. Aşağıdaki örnek, tüm listeyi temizlemek yerine sadece ilgili notu DOM'dan kaldırmanın bir yolunu gösterir:
function deleteNote(noteId) {
// DOM'dan sadece ilgili öğeyi seç ve kaldır
const noteElement = document.getElementById(`note-${noteId}`);
if (noteElement) {
noteElement.remove();
}
// LocalStorage verisini güncelle
let notes = JSON.parse(localStorage.getItem('notes')) || [];
notes = notes.filter(note => note.id !== noteId);
localStorage.setItem('notes', JSON.stringify(notes));
}
Hata Ayıklama (Debugging) İpuçları
Uygulamanızda beklenmedik davranışlar oluştuğunda, tarayıcının geliştirici araçlarını (F12) etkin kullanmak hayat kurtarıcıdır. Özellikle localStorage içeriğini anlık olarak izlemek için şu adımları takip edebilirsiniz:
- Application Sekmesi: Chrome veya Edge tarayıcılarında "Application" sekmesine giderek "Local Storage" kısmından verilerin doğru formatta kaydedilip kaydedilmediğini kontrol edin.
- Console Logları: Veri işleme fonksiyonlarınızın içine
console.table(notes)komutunu ekleyerek verilerin dizi yapısını görselleştirin. - Try-Catch Blokları:
JSON.parse()işlemi sırasında veri bozulması (corruption) yaşanabilir. Bu durumu yönetmek için hata yakalayıcılar kullanın:
try {
const savedNotes = JSON.parse(localStorage.getItem('notes'));
if (!Array.isArray(savedNotes)) throw new Error("Veri formatı hatalı");
} catch (e) {
console.error("Notlar yüklenemedi, varsayılan boş dizi kullanılıyor:", e);
localStorage.setItem('notes', JSON.stringify([]));
}
Uygulamayı Yayına Alma (Deployment) Süreci
Not defteri uygulamanızı yerel bilgisayarınızdan çıkarıp internete açmak için çeşitli ücretsiz platformlar mevcuttur. Uygulamanız sadece istemci tarafında (Client-side) çalıştığı için herhangi bir sunucu (Node.js, PHP vb.) kurulumuna ihtiyaç duymazsınız.
Statik Hosting Seçenekleri
Uygulamanızı hızlıca yayına almak için şu servisleri kullanabilirsiniz:
- GitHub Pages: Projenizi bir GitHub deposuna yükleyerek "Settings" kısmından "Pages" özelliğini aktif edebilirsiniz.
- Netlify: Sürükle-bırak yöntemiyle veya GitHub entegrasyonu ile saniyeler içinde yayına alabilirsiniz.
- Vercel: Modern web projeleri için optimize edilmiş, hızlı bir dağıtım platformudur.
Önemli Not: Uygulamanızı yayına alırkenindex.htmldosyanızın kök dizinde olduğundan ve tüm CSS/JS dosyalarınızın göreceli (relative) yollarla çağrıldığından emin olun. Örneğin:src="./script.js"şeklinde tanımlama yapın.
Dağıtım Öncesi Kontrol Listesi
- Minification: CSS ve JS dosyalarınızı küçülterek (minify) yüklenme süresini azaltın.
- Favicon: Uygulamanızın tarayıcı sekmesinde profesyonel görünmesi için bir favicon ekleyin.
- Meta Etiketleri: SEO uyumluluğu için
etiketleriniiçerisine yerleştirin.
Sonuç
Bu rehberde, Javascript ile dinamik bir etkileşimli not defteri uygulaması nasıl yapılır sorusunu temelden alarak pratik bir şekilde işledik. DOM manipülasyonu, olay dinleyicileri ve LocalStorage kullanımı, web geliştirme kariyerinizde karşınıza çıkacak pek çok projenin temelini oluşturur.
Bir sonraki adım olarak, bu uygulamaya bir veritabanı (Firebase veya Supabase gibi) entegre ederek verilerin cihazlar arası senkronize olmasını sağlayabilir veya CSS ile notlara animasyonlar ekleyerek kullanıcı deneyimini bir üst seviyeye taşıyabilirsiniz.
Not: Yazılım geliştirme süreçlerinde güvenlik sorumluluğu geliştiriciye aittir. Üretim ortamına geçmeden önce verilerin doğrulanması ve yetkilendirme katmanlarının oluşturulması hayati önem taşır.


Yorumlar (0)
Yorum Yaz