CodeBlanks Logo Icon CodeBlanks

Obj state

Obje olarak state yönetimini öğrenirsin.

State olarak nesne

State'i bir nesne olarak tutmak, ilgili değerleri birlikte yönetmeyi kolaylaştırır. Örneğin bir form için const [form, setForm] = useState({'{ name: '', email: '' }'}).

Nesne state'i güncellerken dikkat: setForm({ name: 'Ayşe' }) yazarsan email kaybolur. Çünkü setter verdiğin nesneyi eskisiyle birleştirmez; tamamen değiştirir.

Bunu çözmek için yayma (spread) kullanılır: setForm({'{ ...form, name: 'Ayşe' }'}). Üç nokta eski alanları kopyalar, sonra yalnızca name'i değiştirir. Buna merge denir.

Nesne state'inde dikkat

Nesne state'inde en sık yapılan hata, spread kullanmadan alan güncellemektir. setForm({ name: 'Ayşe' }) yazmak email'i yok eder; ekranda e-posta kaybolur.

Doğru yöntem her zaman setForm({'{ ...form, name: 'Ayşe' }'}). Bu desen yeni bir nesne oluşturur; eski alanları kopyalar ve yalnızca belirtilen alanı değiştirir. React, nesne referansının değiştiğini görür ve yeniden render yapar.

Aynı durum dizi state için de geçerlidir: setItems({'{...items, newItem}'}) gibi. Referans değişmedikçe React güncellemeyi fark etmez.

Uygulama Nesne state'li form

Bir App bileşeni yaz. useState({'{ name: '', city: '' }'}) ile form tanımla. updateName fonksiyonu setForm({'{ ...form, name: text }'}) yapsın. name ve city'yi iki <Text> ile göster. App fonksiyonunu dışa aktar.

Başlangıç kodu

App.js
import { useState } from 'react';
import { Text } from 'react-native';

// nesne state'li formu buraya yaz

Örnek çözüm

App.js
function App() {
  const [form, setForm] = useState({ name: 'Ayşe', city: 'İstanbul' });
  const updateName = (text) => {
    setForm({ ...form, name: text });
  };
  return (
    <>
      <Text>{form.name}</Text>
      <Text>{form.city}</Text>
    </>
  );
}
export default App;

Soru ve cevaplar

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

1 Spread ile güncelle

Soru
import { useState } from 'react';

function App() {
  const [form, setForm] = useState({ name: '', email: '' });
  const updateName = (text) => {
    setForm({ ____, name: text });
  };
}
Cevap
import { useState } from 'react';

function App() {
  const [form, setForm] = useState({ name: '', email: '' });
  const updateName = (text) => {
    setForm({ ...form, name: text });
  };
}

Açıklama: ...form eski alanları kopyalar.

2 Nesne state adımları

Kavram Anlamı
useState({...}) Başlangıç nesnesi
...form Eski alanları kopyalar
name: text Yeni alan değeri
yeni referans Render'ı tetikler

3 Nesne state'inde hangi hata yaygın?

  • useState'i çağırmamak
  • Spread kullanmadan alan güncellemek Doğru cevap
  • Setter'a isim vermemek
  • State'i sayı tutmak

Açıklama: spread'siz atama diğer alanları yok eder.

Başlangıç bölümündeki tüm dersler