merge
veya combineLatest
işlevine hangi akışın geleceğini, yalnızca yeni akışın çalışacağı şekilde tanımlamak için bazı en iyi uygulama önerileri arıyorum.RxJS: birleştirilmiş akışta akış kaynağını tanımlamak için doğru desenler?
Bir TODO uygulaması bağlamında, gelen akışları ekleme ve kaldırma işlemlerine sahibim ve bunları birleştirmek istiyorum; böylece liste düzenlemem, tek bir akış içinde vatansız bir şekilde gerçekleşebilir. Çıktı hem add (concat) hem de remove (filter) olaylarını entegre eden bir listedir, aksi takdirde tüm add veya remove olaylarını içeren ve böylece sonsuz bir şekilde büyümekte olan diğer akışlarla sonuçlanıyor gibi görünüyorsunuz. karşılaşılan
problemler şunlardır:
- gelen olan akış göstermez
merge
kullanılarakcombineLatest
kullanarak - , hangi akışın abone akışını tetiklediğini göstermez, bu nedenle yalnızca bu akışla ilgili işlemleri gerçekleştiremezsiniz.
withLatestFrom
kullanarak,withLatestFrom
giriş kaynağını güncelleştirmeyen yeni bir liste ile sonuçlanır, böylece bir sonraki akış bu listeyle ilgilenmiyorsa bu listeye abone olmazsa, liste eşitlenmez (veya her yeni listeniz ondan önce olan, daha önce olanlar için her dönüşüme gereksiz yeniden adım atmaya neden olur ...). Bir şekilde alt optimum görünüyor
Şu bulundu yaklaşımlar şunlardır:
- Döngüsü JS YAPILACAK uygulaması açıkça ben sanırdım tanımlama için erken akışları, oluşturulan nesnelere doğrudan
type
özelliklerini atar gerektiği Akışların nereden geldiğini doğrudan belirleyen RxJS yöntemlerini kullanmaktan kaçınılmalıdır? - hem ekleyebilir ve olayları kaldırmak, hala güncellenmektedir ediliyordu gelen akışını tanımlayabilir için böylece
merge
kullanırken http://www.jisaacks.com/manipulating-rxjs-streams/ gelen öneri alma ve ekleme akarsu ve[null, {addItem}]
ve[removeItem, {null}]
için çıkarılması akışları çıktısını, öyle ki bölme ben tek bir akışta hem ekleme hem de çıkarma işlemini gerçekleştirebilir (ancak sonra geçiş olayları eklemek istiyorum, vb.), ya da diğer potansiyel akımların farkında olan akış çıktıları oluşturmaya ihtiyacım olduğu için bu tam olarak doğru görünmüyor (biten) ile [boş, null, myOutput, null, vb anlamsız].
Herhangi iyi uygulama önerileri çok açıktır.
Çok teşekkürler. Tecrübenizde küçük görünebilir ama sadece özel bir yol olduğunu fark ettim (özellikle de combineLatest kullanıldığında hangi özel akışın güncellendiğini tespit etmek için kaçırdım) (ve doğru Rx yolunda yapmıyordum). Bu yüzden, bunun doğru olması için gerçekten önemli olduğunu düşündüm ve doğru kalıp (yani sadece nesneye bir tanımlayıcı koymak), her yerde doğru yaklaşım olarak açıklığa kavuşturulmamıştır, bu yüzden benim sorumun neden aşağı oylandığından emin değilim. Her durumda, etiketleme işlevinizle birlikte 'birleştirmeyi 'kullanacağım, teşekkürler. – brokenalarms