2016-07-13 14 views
3

Ich habe diese initialState in meinem Redux Speicher:Objekt zuweisen mit dynamischen Variablen

const initialState = { 
    isFetching : false, 
    active  : {} 
} 

Wo active ein Objekt ist. Jetzt

Ich habe eine Aktion, die sollte Anfügen oder eine Eigenschaft zu active ‚s data Eigenschaft, fügen Sie wie folgt:

[DASHBOARD_TEMPLATE_DATA_RECEIVE]: (state, action) => { 
    return Object.assign({}, state, { 
     isFetching : false, 
     active  : Object.assign({}, active, {data[action.key]: action.data}) 
    }) 
} 

Wie Sie sehen können, ist data[action.key] nicht gestattet. Wie mache ich es?

Antwort

4

Versuchen mit diesem:

active: Object.assign({}, active, { 
    data: Object.assign({}, data, { 
    [action.key]: action.data 
    }) 
}) 
0

das Objekt Aufbau ersten, die Verwendung von eckiger Klammer-Notation Herstellung eine Zeichenfolge als Eigenschaftsnamen zu verwenden:

var data = {}; 
data[action.key] = action.data; 

dann verwenden, die neu Objekt erstellt:

[DASHBOARD_TEMPLATE_DATA_RECEIVE]: (state, action) => { 
    return Object.assign({}, state, { 
     isFetching : false, 
     active  : Object.assign({}, active, data) 
    }) 
} 
+0

denke ich es sein sollte: 'aktiv: Object.assign ({}, aktiv, {data})' –

+0

@JoeyHipolito, vielleicht, wenn das etwas Bestimmtes zu Redux ist, für die ich nicht vertraut bin. Aber in Java sind "Daten" bereits ein Objekt, also brauchen Sie es nicht mit '{}' zu umgeben. – Jamiec

1

Ich würde vermuten, eine berechnete Eigenschaft Name könnte funktionieren.

Ungeprüfte:

active: Object.assign({}, active, {[data[action.key]]: action.data}) 
Verwandte Themen