Not olarak: Redux (Baobab) için dokümanları okudum ve Google'ın ve testlerinin adil bir bölümünü yaptım.
Neden bu kadar güçlü bir Redux uygulaması sadece bir mağaza var önerilmektedir?
Birden fazla mağaza kurulumuna karşı tek mağaza kurulumunun artılarını / eksilerini anlıyorum ( Bu konuda SO üzerinde birçok soru-cevap var ).
IMO, bu mimari karar projelerinin ihtiyaçlarına göre uygulama geliştiricilerine aittir. Peki neden bu kadar şiddetle Redux için neredeyse zorunlu sondaj noktasına sürülmektedir ( hiçbir şey olsa birden fazla mağaza yapmaktan bizi duruyor )?
EDIT: tek mağazaya dönüştürdükten sonra geri bildirim
Birkaç ay boyunca karmaşık bir SPA'yı neyin düşüneceği konusunda redux ile çalıştıktan sonra, tek mağaza yapısının çalışmak için saf bir zevk olduğunu söyleyebilirim.
Başkalarının tek mağazaya karşı birçok mağazanın neden birçok, birçok kullanım durumunda tartışmalı bir soru olduğunu anlamalarına yardımcı olabilecek birkaç nokta:
- güvenilirdir : uygulama durumunu incelemek ve içerikle ilgili bilgi edinmek için seçicileri kullanırız. Gerekli tüm verilerin tek bir mağazada olduğunu biliyoruz. Devlet sorunlarının nerede olabileceğine dair tüm sorgulamaları önler.
- hızlı : mağazamızda şu anda 100'e yakın redüktör var. Bu sayımda bile, sadece bir avuç redüktör herhangi bir dağıtımdaki verileri işler, diğerleri sadece önceki durumu döndürür. Büyük / karmaşık bir mağazanın ( redüktör sayısı ) yavaş olduğu iddiası oldukça tartışmalıdır. En azından oradan herhangi bir performans sorunu görmedik.
- hata ayıklama dostu : Bu, redux'u bir bütün olarak kullanmak için en ikna edici bir argüman olsa da, tek mağaza için birden fazla mağazaya da gider. Bir uygulama oluştururken süreçte durum hataları ( programcı hataları ) olması gerekir, bu normaldir. PITA, bu hataların hata ayıklanması saatler sürmektedir. Tek mağaza ( ve redux-logger ) sayesinde, herhangi bir devlet sorununa birkaç dakikadan fazla zaman harcamadık.
birkaç işaretçi
Redux mağazanızı oluşturmanın asıl zorluğu, onu nasıl yapılandıracağınıza karar vermektir . Birincisi, yol boyunca yapıyı değiştirmek sadece büyük bir acıdır. İkincisi, çünkü büyük ölçüde uygulamalarınızı nasıl kullanacağınızı ve herhangi bir işlem için uygulama verilerinizi sorgulayacağınızı belirler. Bir mağazanın nasıl yapılandırılacağı konusunda birçok öneri var. Bizim durumumuzda aşağıdakilerin ideal olduğunu gördük:
{
apis: { // data from various services
api1: {},
api2: {},
...
},
components: {} // UI state data for each widget, component, you name it
session: {} // session-specific information
}
Umarım bu geri bildirim başkalarına yardımcı olur.
EDIT 2 - yardımcı mağaza araçları
Hızlı bir şekilde karmaşık hale gelebilecek tek bir mağazayı nasıl "kolayca" yöneteceğinizi merak edenler için. Mağazanızın yapısal bağımlılıklarını / mantığını izole etmeye yardımcı olan bir araç var.
Orada Normalizr bir şemaya göre verilerini normalleştirir. Daha sonra, id
bir Sözlük gibi, verilerinizle çalışmak ve verilerinizin diğer bölümlerini almak için bir arayüz sağlar .
O zaman Normalizr'i bilmeden, aynı hatlar boyunca bir şeyler inşa ettim. relational-json bir şema alır ve Tablo tabanlı bir arabirim döndürür ( biraz veritabanı gibi ). Relational-json'un avantajı, veri yapınızın verilerinizin diğer kısımlarına dinamik olarak başvurmasıdır ( esas olarak, verilerinizi normal JS nesneleri gibi herhangi bir yönde hareket ettirebilirsiniz ). Normalizr kadar olgun değil, ama birkaç aydır üretimde başarıyla kullanıyorum.