2016-08-23 4 views
0

Ich bin ziemlich neu zu redux und insbesondere ngrx/store. Ich konnte kein Beispiel zu diesem Thema finden und hoffe, dass ihr mich in die richtige Richtung lenken könnt. Was ich versuche zu erreichen, ist eine Komponente namens freedownloads, die eine Aktion auslöst, die den Zustand einer anderen Komponente namens Counter aktualisieren soll. Insbesondere kann der boolesche Wert canDownload sein. Im Moment habe ich 2 Reduzierstücke. Sollte ich Mähdrescher benutzen? Hast du irgendwelche Beispiele? Ich verwende die neueste Version von ngrx/store (2.1.2)ngrx/store So erstellen Sie abhängige Reduzierungen

Vielen Dank!

//counter.ts 
... 
export const counter = (state: CounterState = initialState, action: Action) => { 
    switch (action.type) { 
    case DECREMENT: 
     let isZero:boolean = (state.counter - 1) > 0; 
     return Object.assign({}, state, { 
     counter: state.counter - 1, 
     canDownload: isZero 
     }); 
    case INCREMENT: 
     return Object.assign({}, state, { 
     counter: state.counter + 3, 
     canDownload: true 
     }); 

    default: 
     return state; 
    } 
} 


//freedownloads.ts 
... 
export const freedownloads = (state: boolean = false, action: Action) => { 

    switch (action.type) { 
    case ENABLE: 
     return true; 
    case DISABLE: 
     return false; 
    default: 
     return state; 
    } 
} 

Antwort

1

Angenommen, ich verstehe Ihre Frage ...

Ihre Aktionen über Reduzierungen geteilt werden sollte, da NGRX nur einen Speicher hat, die eine Kombination aller Reduzierer mit provideStore registriert ist. Sie suchen nur in beiden Reduzierern nach diesem Aktionsnamen und führen dann die Logik aus, die Sie für jede Zustandsscheibe dort benötigen. Aus diesem Grund muss jeder Reduzierer den übergebenen Status als Standard zurückgeben, wenn keine Aktion mit dem Wert eines Schalters übereinstimmt.

Also ich würde vermuten, dass Ihr Code so etwas sein müsste.

export const counter = (state: CounterState = initialState, action: Action) => { 
    switch (action.type) { 
    case DECREMENT: 
     let isZero:boolean = (state.counter - 1) > 0; 
     return Object.assign({}, state, { 
     counter: state.counter - 1, 
     canDownload: isZero 
     }); 
    case ENABLE: 
     return Object.assign({}, state, { 
     canDownload: true 
     }); 
    case INCREMENT: 
     return Object.assign({}, state, { 
    counter: state.counter + 3, 
    canDownload: true 
    }); 

default: 
    return state; 
    } 
} 
Verwandte Themen