redux middleware

0
const logAction = store =>{
    return next=>{
        return action =>{
            const result = next(action);
            console.log('middleware', result);
            return result;
        }
    }
};

Dlaczego budowanie middleware w reduxi-e tak wyglada? Pytanie zadaję z ciekawości. Natomiast nie wiem dlaczego tak wygląda to jak wygląda. Powyżej mój własny middleware. Dlaczego są 2 zagnieżdżone funkcje?

1

Taki sposb pisania funkcji umożliwia partial application czyli dostarczanie funkcji argumentow jeden po drugim w rożnych miejscach aplikacji. W językach typowo funkcyjnych taki currying jest automatyczny. W JS, ktory jest semi-funkcyjny trzeba to zrobić jawnie jeśli chcemy z tego skorzystać. W praktyce myśl o takiej funkcji nie jako funkcji, ktora zwraca funkcję, ktora zwraca funkcję (choc to technicznie prawda) ale raczej jako o funkcji, ktra przyjmuje 3 argumenty, gdzie nie musisz ich podawać wszyskich na raz.

Coś takiego:

const fnA = a => b => c => {}

// Wywołanie pełne:
const result = fnA(1)(2)(3)

jest z grubsza bardziej funkcjonalnym (pun intended) odpowiednikiem tego:

const fnB = (a, b, c) => {}

// Wywołanie:
const result = fnB(1, 2, 3)

bo można tego użyć na wiele rożnych sposobow - wywołać z pierwszym parametrem, przekazać do innej funkcji, ktora doda drugi parametr i tak dalej. Taką technikę stosuje autor Reduksa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1