restate / v1.0.0
Sık sorulan sorular
restate'te render, kaydetme, scope ve hatalarla ilgili en sık sorulan soruların yanıtları.
Eşleşen soru yok
Başka bir terim deneyin ya da tüm soruları gösterin.
TemellerProvider gerekir mi?
Hayır. Store modül düzeyinde bir değerdir; onu import eden her bileşen kullanabilir. Durumun bir bileşen örneğine ait olması gerektiğinde useRestateScope kullanın.
TemellerBileşenim neden her değişiklikte render ediliyor?
Hook'u selector olmadan çağırmak tüm değere abone olur. Yalnızca bileşenin gösterdiğini döndüren bir selector verin.
TemellerBenim selector'ım nesne döndürüyor ve her seferinde render ediliyor.
Object.is'e göre yeni bir nesne asla öncekine eşit değildir. İkinci argüman olarak shallow verin ya da alanları ayrı ayrı seçin.
TemellerNesne değişti ama hiçbir şey güncellenmedi.
set aynı nesneyi aldı, bu yüzden restate bir değişiklik görmedi. set'ten yeni bir nesne ya da dizi döndürün.
KaydetmeKayıtlı verileri nerede beklemeliyim?
Bir kez, istemci giriş noktasında: uygulamayı render etmeden önce await restateManager.ready çalıştırın. Bundan sonra bileşenler kayıtlı değerleri doğrudan okur. useRestateScope içindeki store'lar kendi scope.manager.ready'lerini bekler.
KaydetmeVeriler depolamaya ne zaman yazılır?
Yalnızca save() çağırdığınızda ya da autoSave açıkken değişikliklerden sonra. Düzenleme belleği değiştirir; status().dirty kaydedilmemiş değişiklikler olduğunu söyler.
KaydetmeautoSave mi save() mi?
Her zaman kaydedilmesi gereken ayarlar ve taslaklar için autoSave kullanın. Kaydet düğmesi ya da form gönderimi gibi kararı kullanıcının verdiği durumlarda save() kullanın. autoSave açıkken de save() çağırabilirsiniz, örneğin pagehide'da.
HatalarrestateManager.ready reddedildi. Şimdi ne olacak?
Bir kayıt okunamadığında, taşınamadığında ya da doğrulanamadığında BULK_OPERATION_FAILED ile reddedilir. error.failures her store'u ve hatasını listeler. Kaydı düzeltin ya da temizleyin, o store'un initialize()'ını çağırın ve ready'ye yeniden erişin.
HatalarQUEUE_FULL ya da STORAGE_TIMEOUT görüyorum.
Depolama, kuyruğa eklediğiniz işten daha yavaş. Sıkı bir döngüde save() çağırmaktan kaçının — bekleyen kaydetme zaten en son değeri alır — ya da beklemeli autoSave kullanın. Gerekirse maxPendingOperations ve operationTimeoutMs'i ayarlayın.
HatalarAyrılmadan sonra geç gelen bir istek store'a yazıyor.
Yok edilmiş bir store'da set() ve reset(), ayrılmadan sonraki React durum güncellemesi gibi yok sayılır. Abonelik STORE_DESTROYED fırlatır ve depolama komutları reddedilir.
Scope'larScope'lu store'um yeni props'u yok sayıyor.
Factory, useState başlatıcısı gibi bir kez çalışır. Her yeni belgenin yeni bir scope alması için bileşeni belge başına bir key ile render edin.
Scope'larHidrasyon uyuşmazlığından nasıl kaçınırım?
Sunucuda ve istemcide aynı sunucu verisini props olarak verin ve useRestateScope içinde store'u ondan oluşturun. Başlangıç değeri sunucu anlık görüntüsü olur.
Scope'larScope'lu store'um neden restateManager.ready içinde değil?
Scope içindeki kayıtlı store'lar, sahip bileşen istemcide commit edildiğinde yüklemeye başlar. O bileşende bir yükleme sınırı içinde scope.manager.ready'yi bekleyin.
KaydetmeReact Native'de MMKV_UNAVAILABLE.
react-native-mmkv'yi ve native bağımlılıklarını kurun, sonra uygulamayı yeniden derleyin. Expo'da development build kullanın. Bellek içi store'lar MMKV olmadan çalışır.