Uygulamanızdaki bir dizi eylemin bir liste veya belki daha çok bir akış gibi olduğunu düşünüyorsanız, daha mantıklı olabilir.
Bu uydurma örneği ele alalım:
['apple', 'banana', 'cherry'].reduce((acc, item) => acc + item.length, 0)
İlk argüman, formun bir işlevidir (Int, String) => Int. Bir başlangıç değerinin yanı sıra, reduce"indirgeme işlevi" olarak adlandırılabilecek şeyi geçersiniz ve bir dizi öğe işlemenin sonucunu alırsınız. Dolayısıyla, azaltıcı işlevin sonucu değiştirmek için birbirini izleyen her bir öğeye ne yapıldığını açıkladığını söyleyebilirsiniz. Diğer bir deyişle, indirgeyici işlevi önceki çıktıyı ve sonraki değeri alır ve bir sonraki çıktıyı hesaplar.
Bu, bir Redux düşürücünün yaptığına benzer: önceki durumu ve mevcut eylemi alır ve bir sonraki durumu hesaplar.
Gerçek işlevsel programlama stilinde, argümanlara ve sonuca uygulanan anlamı kavramsal olarak silebilir ve sadece girdilerin ve çıktının "şekline" odaklanabilirsiniz.
Uygulamada, Redux düşürücüler tipik olarak ortogonaldir, çünkü belirli bir eylem için hepsinin aynı özelliklerde değişiklik yapmaması, sorumluluklarını bölmeyi ve çıktıyı toplamayı kolaylaştırır combineReducers.
reduce, varsayılan değere ve başka bir değere erişimi vardır ve size potansiyel olarak dönüştürülmüş varsayılan değerinizi geri verir.state -> action -> state