2017-08-12 30 views
10

En az benim Angular 4 boilerplate'de @angular-redux/store ve redux'u başarıyla uygularım. Redux döngüsünün arkasındaki fikri anlıyorum, ancak basit karşı arttırma butonu örneklerini geçmem için zor bir zamanım var.Angular 4 + Redux kurulumundaki formlar nasıl işlenir

Şu anda API'mdan bir JWT jetonu alması gereken bir bileşen olarak basit bir oturum açma formu oluşturdum. Bunu çok karmaşık yapmak istemiyorum, bu yüzden bir form bileşeni diğer bileşenleri etkilemediğinden, form durumunu depoda saklamak istemiyorum, doğru mu?

Gönderme düğmesine bastığımda, login.component.ts benim doğrulamam ve http isteğimi API'm ile işleyecektir. Ama bir form göndermek de bir eylemdir, bu yüzden Redux ne zaman burada oynanır?

+0

Giriş formu için redux kullanmanın mantıklı olduğunu düşünmüyorum (bu durumla ilgili değil), yerleşik bir işleve sahip girişi kolayca doğrulayabilmeniz için reaktif bir form kullanın: https://angular.io/guide/reactive-forms – user3492940

+0

Zaten reaktif bir formdur. Giriş yapıp çıkış yaptınız devletler doğru mu? – user3411864

+0

Redux ile ilgili çok fazla deneyimim yok, ancak bu makalede bir şekilde sorunuzu yanıtlayabilir. http://brianflove.com/2017/04/10/angular-reactive-authentication/ – trungk18

cevap

3

deposunda formu durumunu tutmak için gerek yoktur çalışmaya Bütün bir uygulama inşa ngrx Link

üzerinde

Daha. Doğrulamaları ve değişiklikleri işlemek için reaktif bir form kullanın. Her şeyi mağazada tutmak zorunda değilsiniz. Bir eylem bunu böyle gönderecek tabi

:

this.store.dispatch({ type: ACTION_TYPE, payload: this.form.value }); 

Bu eylem giriş API arayacak bir etkisi, tetikleyecektir. Bir başarıdan veya bir hatadan sonra, işlemek için yeni bir eylem göndermeniz gerekir. Aramanız başarılı olursa, bu etkiden bir eylem gönderirsiniz; örneğin, LOGIN_SUCCESS gibi başka bir etkide ele alacağınız bir işlem gönderirsiniz; bu, örneğin, mağazaya kaydedeceğiniz 'Kullanıcı verilerini al' API'sini çağırır. jwt'a gelince, bu etkiyi localStorage'a kaydedebilirsiniz, böylece uygulama oturum açmış durumu hatırlar. Kodunuzda, kullanıcının oturum açıp açmadığını belirten, status numaralı bir gözlemlenebilir özelliğe sahip olan bir AuthenticationService var demektir.

Bir hata olursa, bunu mağazadaki bazı hatalar özelliğinde kaydetmeniz ve ekranda görüntülemeniz gerekir. form.

+0

Yani gönderim depolama ile aynı değil mi? Tam form yükünü mağazaya gönderdiğinden mi? – user3411864

+0

@ user3411864 Sevkiyat yalnızca bir eylem başlatır. Bu eylemi bir etkide ve sonunda bir redüktörde ele almalısınız. Bir örnek için bir etki, bir API çağırırken, redüktör yeni durumu döndürür. Eylemin kendisi hiçbir şey yapmıyor. Yük yükü keyfi, söz konusu eylem için ihtiyacınız olan her şeyi iletebilirsiniz. – Matsura

+0

Bu resmi duvardaki https://uploads.toptal.io/blog/image/121874/toptal-blog-image-1484754099125-659f9aa8dbf05fea9aa209dc1de0f5e2.png adresinde yaşıyorum ama muhtemelen artık doğru değil. Etkiler bu şemaya nereye sığar? '@ Ngrx/effects'’e mi atıf yapıyorsunuz? Bir Udemy kursundan, component.ts dosyasındaki onSubmit() işlevinde bir LOGIN_BUSY eylemi göndermem gerektiğini, API'ye async çağrısı yapmam gerektiğini ve başarılı bir şekilde ikinci bir LOGIN_SUCCEED çağrısını gönderdiğimi öğrendim. Bu yaklaşımın nesi yanlış? – user3411864

4

Formlar, kullanıcı verilerini toplamak için bir araçtır ve tüm doğrulamalar, gelecekteki işlemler için uygulamanız için kullanılabilir olduğundan emin olmak için bu veriler üzerinde yaptığınız denetimler gibidir.

Böyle bir senaryoda, kullanabileceğiniz en iyi çözüm reaktif biçimdir, bu, formda validators ve mantığı eklemek ve her şeyi tek bir noktada tutmak için ihtiyacınız olan tüm esnekliği size sağlayacaktır.

Gönderme sırasında tüm doğrulama ve kontroller tamamlandıktan sonra, tüm form verilerini bir yük olarak nesneye nesne olarak gönderebilirsiniz. Daha sonra başvurunuzu etrafında hareket edecek bu this.store.dispatch({ type: Form_Data , payload : this.form.value});

gibi

. daha fazla işlem için. Eyaletinizin bir parçası olarak.

Reaktif formları kullanma hakkında daha fazla bilgi için, bu link numaralı telefonu kontrol edin. ngrx v4 example onun repo link