2017-08-03 3 views
1

J'ai les code:L'utilisation immuabilité-aide dans React pour définir une valeur d'un (peut-être imbriquée) objet

var update=require('immutability-helper'); 
 

 
var state = { 
 
    step: 1, 
 
    fields: { 
 
    type: '', 
 
    name: '', 
 
    subtype: '', 
 
    team: '', 
 
    agreement: '' 
 
    } 
 
}; 
 

 
function assignAttribute(attr, value) { 
 
    var temp = update(state, { 
 
    [attr]: {$set: value} 
 
    }); 
 

 
    state = temp; 
 
}; 
 

 
console.log(state); // -> { step: 1, fields: { type: '', name: '', subtype: '', team: '', agreement: '' } } 
 
assignAttribute('step', 3); 
 
console.log(state); // -> { step: 3, fields: { type: '', name: '', subtype: '', team: '', agreement: '' } } 
 
assignAttribute('fields.type','superType'); 
 
console.log(state); // -> { step: 3, fields: { type: '', name: '', subtype: '', team: '', agreement: '' }, 'fields.type': 'superType' }

Ce que je veux est que la dernière ligne est la suivante:

{ step: '3', fields: { type: 'superType', name: '', subtype: '', team: '', agreement: '' } } 

le principal problème semble être que dans la fonction assignAttribute [attr] n'est plus utilisé comme point notation que puis-je faire gérer cela?

Répondre

0

J'ai trouvé une solution (mais pas la bonne solution)

En utilisant lodash/fp:

var _=require('lodash/fp'); 

var state = { 
    step: 1, 
    fields: { 
    type: '', 
    name: '', 
    subtype: '', 
    team: '', 
    agreement: '' 
    } 
}; 

function assignAttribute(attr, value) { 
    var temp = _.set(attr, value, state); 

    state = temp; 
}; 

En raison du fait que _.set est immuable maintenant je suis ce que je cherchais: -)