2017-11-03 2 views
0
export const mySelector = createSelector(
    [selectorA, selectorB], // but I want selectorB or selectorC to be chosen here using logic 
    (foo, bar) => { 
     // ... 
    } 
); 

I bedingt selectorB oder selectorC erneut auswählen möchte Verwendung verwenden, wenn diese Auswahlvorrichtung auf dem Zustand in dem Speicher basierend Erstellen (das heißt der Wert, der durch einen anderen Selektor zurückgegeben).Komponieren Bedingtes einen Selektor

Wie kann ich das tun?

+0

versucht habe, nicht neu wählen:

Ein tatsächlicher bedingter Aufruf könnte wie folgt implementiert werden. Welches Problem haben Sie mit Logik, um den Wert zu bestimmen? – guest271314

+0

@Ben Lassen Sie mich wissen, wenn Sie die Idee von meiner Antwort –

+0

Vielen Dank beide. – Ben

Antwort

1

nur darauf zu hinweisen, dass der Ansatz vorgeschlagen, in die akzeptierte Antwort würde sowohl selectorB als auch selectorC auf jedem selectorCorB call auswerten. Welches ist nicht das gewünschte Verhalten.

export const selectorCorB = createSelector(
    selectorStateX 
    (...arguments) => arguments, 
    (x, arguments) => x ? selectorB(...arguments) : selectorC(...arguments) 
); 
1

dann eine selectorCorB machen Komponieren selectorB, selectorC, selectorX

selectorX ist der Wähler dieser Variablen x von Speicher, die entweder selectorB oder selectorC entscheidet

const selectorCorB = createSelector(
    selectorB, 
    selectorC, 
    selectorStateX, 
    (b, c, x) => x? b: c 
) 

mySelector = createSelector(
    [selectorA, selectorCorB], // will be A AND B OR C depending on x 
    (foo, cOrb) => { 
     // ... 
    } 
);