Store.dispatch, Redux ile eşzamanlı mı yoksa eşzamansız mı


106

Bunun basit bir soru olduğunun farkındayım ama cevabı başka yerde bulma şansım olmadı.

store.dispatchEşzamanlı mı yoksa eşzamansız Reduxmı?

Eşzamansız olması durumunda, eylem mümkün olduğu şekilde yayıldıktan sonra bir geri arama ekleme olasılığı var Reactmı?


Durumun senkron ( getState()) olarak güncellendiğine ancak güncellenmediğine dikkat edin mapStateToProps. Öyleyse this.props.valueeski değer getState().value, yenidir - codesandbox.io/s/reactredux-forked-0m5eo?file=/Page.js
Mosh Feu

Yanıtlar:


91

AFAIK, gönderme eylemi eşzamanlıdır. Eşzamansız çağrıyı ele almaya istekli iseniz, thunk-middleware'i redux'te kullanabilirsiniz; burada dispatch, size kolaylık sağlamak için çağırabileceğiniz bir geri arama işlevi olarak sağlanır. Daha fazla bilgi için, SO'daki şu yanıtı Yazarın kendisi tarafından kontrol edin: Zaman aşımıyla bir Redux eylemi nasıl gönderilir?


Ancak birçok kişi bana şunu öneriyor: Eşzamansız akışta yeniden uyarlama durumunu öngörülemez hale getiren gönderimi çağırmayın, gönderimi aramak için eşitlemelisiniz . Ancak thunk-middleware, bekledikten sonra gönderimi çağırır, bu zaman uyumsuz akıştır. Hangi görüş doğru? kötü İngilizcem için üzgünüm :)
nükleer

Karşılaştığınız zorluklardan emin değilim, ancak thunkeylemi kullanmanın genel fikri , kodun eşzamansız akışını kolaylaştırmaktır. Örneğin, söz yerine getirildiğinde kullanıcı eylemi gönderebilir.
agpt

69

Kodun kendisinden daha iyi kimse bilemez . =) Gördüğünüz gibi dispatchkesinlikle eşzamanlı. Buradaki tek uyarı, mağazanın yöntemi enhancersdeğiştirebileceği (ve yapacağı ) dır dispatch. Örneğin, geliştiriciye bir göz atınapplyMiddleware , varsayılan dispatchyöntemi kendi uygulamasıyla değiştirerek orta yazılımları devreye sokmanıza izin verir . Hiç Redux görmedim rağmen enhanceraslında eşzamanlı doğasını kaldırmak hangi dispatch.


1
Ara yazılım uygulama bağlantısını https://github.com/reduxjs/redux/blob/master/src/applyMiddleware.ts#L19 adresinde güncellemelisiniz (js -> ts'den redux geçişi nedeniyle düzenleme yapamıyorum <6 karakter olduğu için). Ya da, belki de sizin code itselfbağlantınızda olduğu gibi js kullandıklarında , commit'lerin 'kalıcı bağlantı' yönünden dolayı çıkmaza girecek olan bir commit'i referans göstermelisiniz .
user7413060
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.