React Context vs React Redux, her birini ne zaman kullanmalıyım? [kapalı]


189

React 16.3.0 yayınlandı ve Bağlam API'sı artık deneysel bir özellik değil. Dan Abramov (Redux'un yaratıcısı) burada bu konuda iyi bir yorum yazdı , ancak Bağlamın hala Deneysel bir özellik olduğu 2 yıl oldu.

Kullanmalıyım zaman Sorum görüşleriniz / deneyim olduğunu Bağlam React üzerinde Redux tepki ve tersi yardımcısı?


Redux ve React Context API'sini karşılaştırıyorsanız, bunun nedeni yalnızca bileşenler arasındaki senkronizasyondaki değişkenleri korumak istemenizdir. duixNpm paketini kontrol edin . Geri çağrıları olan basit bir devlet yöneticisi, uygulaması gerçekten çok kolay. Açık olmak gerekirse: Ben yaratıcıyım.
Broda Noel

Yanıtlar:


208

As Bağlam artık deneysel bir özellik olduğu ve doğrudan uygulamada Bağlam kullanabilir ve bunun için tasarlanmıştır ne içe geçmiş bileşenlere verileri aşağı geçirmeden için büyük olacak.

Mark Erikson'un blogunda yazdığı gibi :

Redux'u yalnızca props'ları aktarmaktan kaçınmak için kullanıyorsanız, bağlam Redux'un yerini alabilir - ancak ilk etapta muhtemelen Redux'a ihtiyacınız yoktu.

Bağlam ayrıca, Redux DevToolsdurum güncellemelerinizi izleme, middlewaremerkezi uygulama mantığı ekleme ve bunu Redux sağlayan diğer güçlü özellikler gibi hiçbir şey vermez .

Reduxçok daha güçlüdür ve Context ApiAs @danAbramov'un belirttiği gibi, sağlanmayan çok sayıda özellik sağlar

React Redux bağlamı dahili olarak kullanır, ancak bu gerçeği herkese açık API'da göstermez. Dolayısıyla, React Redux üzerinden bağlamı kullanmaktan çok daha güvenli hissetmelisiniz, çünkü eğer değişirse, kodu güncelleme yükü React Redux'da olacak, siz değil.

Uygulamasını, en son içerik API'sine uymak için güncellemek gerçekten de Redux'a kadar

En son Context API, verileri bileşen arasında iletmek için Redux'u kullanacağınız Uygulamalar için kullanılabilir, ancak merkezi verileri kullanan ve Action creators kullanan redux-thunkveya redux-sagahala redux'a ihtiyaç duyan Action creators'ta API isteğini işleyen uygulama . Bunun dışında, redux üzerinde redux-persistdepo verilerini kaydetmenize ve yenilemede rehidrate etmenize izin veren bağlam kütüphanesi gibi diğer kütüphaneler de vardır.

@Dan_abramov blogunda belirtildiği gibi Sen Redux gerekmeyebilir , o redux gibi yararlı bir uygulama vardır

  • Durumunuzu yerel bir depolama biriminde saklayın ve ardından kutudan çıkar çıkmaz önyükleme yapın.
  • Sunucudaki durumu önceden doldurun, istemciye HTML olarak gönderin ve kutusundan çıkın.
  • Ürün geliştiricilerini seri hale getirin ve durum anlık görüntüsü ile birlikte bunları otomatik hata raporlarına ekleyin, böylece ürün geliştiricileri
    hataları yeniden oluşturmak için bunları yeniden oynatabilir.
  • Kodun yazılma biçiminde önemli değişiklikler yapmadan ortak çalışma ortamları uygulamak için eylem nesnelerini ağ üzerinden iletin.
  • Geri alma geçmişini koruyun veya kodun yazılma biçiminde önemli değişiklikler yapmadan iyimser mutasyonlar uygulayın.
  • Kalkınmadaki devlet tarihi arasında seyahat edin ve kod değiştiğinde mevcut durumu eylem geçmişinden yeniden değerlendirin, bir TDD.
  • Ürün geliştiricilerinin uygulamaları için özel araçlar oluşturabilmeleri için geliştirme araçlarına tam denetim ve kontrol özellikleri sağlayın
    .
  • İş mantığının çoğunu yeniden kullanırken alternatif kullanıcı arayüzleri sağlayın.

Bu birçok uygulama ile Redux'un yeni Context API ile değiştirileceğini söylemek için çok erken


Tamam, ama yeniden kullanılabilirlik ne olacak? Redux + thunk ve özellikle redux + saga zar zor olduğunda, bağlamlar tamamen yeniden kullanılabilir.
Yurii Haiovyi

4
@Daggett Anlamak zorunda olduğumuz bir şey redux bağlam değil, bağlam üzerine inşa edilmiş, sahip olduğunuz mağaza bağlam tarafından aktarıldı, ayrıca yeniden kullanılabilirlik ile ne demek istediğinizi ayrıntılı olarak açıklayabilirsiniz
Shubham Khatri

Yan etkileri olan yeniden kullanılabilir konteyner gibi temel bir şeyin geliştirilmesi bile redux ile bir kabus haline gelir. Redux uygulama seviyesine sıkıdır ve yine de tekrar kullanılabilir vb. Diyebilirsiniz, ancak tekrar kullanılabilir diyerek tamamen yeniden kullanılabilir demek istiyorum ... Spiketti spagetti olmadan, ayrı bir paket olarak inşa edildi ve uygulama kurulumuna bağımsız olarak tekrar kullanılabilir .
Yurii Haiovyi

@YuriiHaiovyi Sorularınızı kabul ediyorum. Bu cevap temelde bağlantılı blog yayınlarının söylediklerinin derlenmiş bir versiyonudur. Kendi bakış açısımı paylaşmayla ilgili hiçbir şey, sadece bağlam kullanıyordum ve sonra sıkıştım ve bazı x, y, z nedenleri için kötü bir seçim olduğunu hissettim ve sonra çözen Redux, Mobx'e taşındı .. veya tersi örneğin hikaye . Temelde insanlar bunu okur ya da kötü ya da iyi hikayeler olup olmadığını görmek için araştırıyorlar, bu da okuyucuların düşünmeye ve hesaplanmış kararlar almalarına yardımcı olabilir ... Yani sorum şu yolu seçer misiniz?
Arup Rakshit

4
Redux'un hangi kısmı yeniden kullanılamaz? Redüktörlü (tepki bile, açısal) başka bir uygulamada redüktörleri, seçicileri, eylemleri ve eylem yaratıcılarını kolayca tekrar kullanabilirsiniz.
Dávid Molnár

85

Redux'u yalnızca sahne donanımlarının derin yuvalanmış bileşenlere aktarılmasını önlemek için kullanıyorsanız, Redux'uContext API ile değiştirebilirsiniz . Bu kullanım durumu için tam olarak tasarlanmıştır.

Diğer yandan, her şey için Redux kullanıyorsanız (öngörülebilir bir durum konteynerine sahip olmak, uygulamanızın mantığını bileşenlerinizin dışında tutmak , uygulamanızın durumunu merkezileştirmek, uygulamanızın durumunu ne zaman, nerede, neden ve nasıl izlemek için Redux DevTools'u kullanmak veya Redux Form , Redux Saga , Redux Undo , Redux Persist , Redux Logger , vb.) gibi eklentiler kullanarak Redux'u terk etmeniz için kesinlikle hiçbir neden yoktur. ContextAPI, bunların hiçbirini sağlamaz.

Ve ben şahsen Redux DevTools uzantısının Redux'u kullanmaya devam etmesini haklı çıkaran inanılmaz, hafife alınmış bir hata ayıklama aracı olduğuna inanıyorum .

Bazı referanslar:


12

API çağrıları (ayrıca Axios kullanarak) yapmak ve redüktörlere yanıt göndermek için redux-thunk ile redux kullanmayı tercih ederim. Temiz ve anlaşılması kolaydır.

Bağlam API'sı, React bileşenlerinin depoya nasıl bağlandığına ilişkin tepki-redux kısmına çok özeldir. Bunun için tepki redux iyidir. Ancak, Bağlam resmi olarak desteklendiğinden, tepki-redux yerine Bağlam API'sını kullanabilirsiniz.

Bu nedenle, soru Context API'ye karşılık reat-redux olmalı, Context API'ye karşı redux olmamalıdır. Ayrıca, soru biraz tartışılmaktadır. Reat-redux'a aşina olduğum ve tüm projelerde kullandığım için kullanmaya devam edeceğim. (Değişmem için bir teşvik yok).

Ancak, redux'u bugün öğreniyorsanız ve hiçbir yerde kullanmadıysanız, Context API'yi denemeye ve reat-redux'u özel Context API kodunuzla değiştirmeye değer. Belki bu şekilde çok daha temizdir.

Şahsen, bu bir aşinalık sorunudur. Birini diğerinden seçmenin açık bir nedeni yoktur, çünkü eşdeğerdirler. Ve dahili olarak, tepki-redux zaten Bağlam kullanır.


10

Redux'u benim için kullanmanın tek nedeni:

  • Küresel bir durum nesnesi istiyorsunuz (hata ayıklama, kalıcılık gibi çeşitli nedenlerle ...)
  • Uygulamanız büyük veya çok büyük olacak ve birçok geliştiriciye göre ölçeklendirilmelidir: bu durumda muhtemelen bir düzeyde dolaylılığa (yani bir olay sistemine) ihtiyacınız vardır: etkinlikleri (geçmişte) ve ardından tanımadığınız kişileri organizasyon aslında onları dinleyebilir

Muhtemelen tüm uygulamanız için dolaylı yayınlama düzeyine ihtiyacınız yoktur, bu nedenle stilleri karıştırmak ve yerel durumu / bağlamı ve Redux'u aynı anda kullanmak iyidir.


1
  • Çeşitli amaçlar için ara katman yazılımı kullanmanız gerekiyorsa. Örneğin, günlük tutma eylemleri, hata raporlama, sunucunun yanıtına bağlı olarak diğer istekleri gönderme vb.
  • Birden çok uç noktadan gelen veriler tek bir bileşeni / görünümü etkilediğinde.
  • Uygulamalarınızdaki eylemler üzerinde daha fazla kontrole sahip olmak istediğinizde. Redux, izleme eylemlerini ve veri değişimini sağlar, hata ayıklamayı büyük ölçüde basitleştirir.
  • Sunucu yanıtının uygulamanızın durumunu doğrudan değiştirmesini istemiyorsanız. Redux, bu verilerin nasıl, ne zaman ve uygulanacağına karar verebileceğiniz bir katman ekler. Gözlemci modeli. Tüm uygulamada birden çok yayıncı ve abone oluşturmak yerine, bileşenleri yalnızca Redux mağazasına bağlarsınız.

Kimden: Redux ne zaman kullanılır?

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.