CodeBlanks Logo Icon CodeBlanks

useLocalStorage

State'i tarayıcı localStorage'ına yazan bir hook yazmayı öğrenirsin.

useLocalStorage

useLocalStorage, bir state'i tarayıcının localStorage'ında saklar. Sayfa yenilense bile değer kaybolmaz. useState'in kalıcı versiyonudur.

İskelet: const [value, setValue] = useState(() => { const saved = localStorage.getItem(key); return saved ? JSON.parse(saved) : initial; });. Başlangıç değeri bir fonksiyon olarak verilir; böylece yalnızca ilk okumada localStorage'a erişilir.

Değişiklikleri kaydetmek için useEffect eklenir: useEffect(() => localStorage.setItem(key, JSON.stringify(value)), [value, key]);. Böylece her değişimde otomatik kaydeder.

JSON dönüşümü

localStorage yalnızca dize (string) saklar. Bu yüzden nesne ya da dizi kaydetmek için JSON.stringify ile dizeye, okurken JSON.parse ile geri nesneye çeviririz.

Hata yönetimi önemli: bozuk bir dize JSON.parse'i patlatabilir. Bu yüzden okuma genellikle try/catch içine alınır. Aksi halde uygulama açılışta çökebilir.

Tür güvenliği için bir önlem: kaydedilen veriyi bir yapıya göre doğrulamak. Bu derste basit tutuyoruz ama üretimde bu adımı atlamamak gerekir.

Uygulama useLocalStorage iskeleti

Aşağıdaki iskeleti tamamla. useLocalStorage(key, initial) hook'u yaz. useState ile lazy başlangıç: () => { const saved = localStorage.getItem(key); return saved ? JSON.parse(saved) : initial; }. useEffect ile localStorage.setItem(key, JSON.stringify(value)); bağımlılık [key, value]. [value, setValue] döndür. Hook'u dışa aktar.

Başlangıç kodu

App.jsx
import { useState, useEffect } from "react";

// useLocalStorage hook'unu buraya yaz

Örnek çözüm

App.jsx
import { useState, useEffect } from "react";

function useLocalStorage(key, initial) {
  const [value, setValue] = useState(() => {
    const saved = localStorage.getItem(key);
    return saved ? JSON.parse(saved) : initial;
  });
  useEffect(() => {
    localStorage.setItem(key, JSON.stringify(value));
  }, [key, value]);
  return [value, setValue];
}

export default useLocalStorage;

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Lazy başlangıç ne işe yarar?

  • Her render'da okur
  • İlk okumada localStorage'a erişir Doğru cevap
  • useEffect'i atlar
  • State'i siler

Açıklama: Lazy init yalnızca ilk okumada çalışır.

2 Kayıt yöntemi

Soru
Tarayıcıya kaydetmek için ____ çağrılır.
Cevap
Tarayıcıya kaydetmek için localStorage.setItem çağrılır.

Açıklama: localStorage.setItem ile kaydedilir.

3 useLocalStorage adımlarını eşleştir

Kavram Anlamı
useState Lazy başlangıç
localStorage.getItem Okuma
JSON.parse Dizeden nesne
useEffect Kayıt

Orta seviye bölümündeki tüm dersler