2016-02-22 2 views
1

Je suis implémentant immutable dans mon application redux et j'ai des problèmes avec la fonction updateIn. J'ai une bascule que je veux allumer et éteindre avec cette action, dans mon réducteur. La logique est comme ceci:immutable, updateIn donnant keyPath invalide

 case actions.ADMIN_TOGGLE_SETTING: 
      console.log("hit toggle", action); 
      console.log("state", state.toJS()); 
      return state.updateIn(['toggleSettings', action.name], (oldValue) => !oldValue); 

Donc cela me donne une erreur de console de Uncaught Error: invalid keyPath. Je ne sais pas pourquoi, parce que journal de la console qui exécute le state.toJS() ressemble à ceci:

{ 
    toggleSettings : { 
     svl : true 
    } 
} 

et action.name est « SVL ». Donc je pense peut-être que le nom d'action est le problème? mais il passe correctement, il ressemble à:

{type: "ADMIN_TOGGLE_SETTING", name: "svl" } 

Tout conseil serait génial. Merci!

Répondre

4

méthode updateIn ne peut fonctionne sur la structure de données de immutable.js, donc si Uncaught Error: invalid keyPath émis, il est probable que votre structure de données:

{ 
    svl: true 
} 

est une plaine objet JavaScript au lieu d'une structure de données immutable.js, essayez de le convertir en utilisant Immutable.Map.

+1

Et pour une structure de données de nidification, peut-être [Immutable.fromJS] (http://facebook.github.io/immutable-js/docs/#/fromJS) est un meilleur choix. – hydRAnger

0

comme ceci: (oldValue=action.name)=>!oldValue

+0

Ceci ne fournit pas de réponse à la question. Une fois que vous avez suffisamment [réputation] (https://stackoverflow.com/help/whats-reputation) vous pourrez [commenter n'importe quel article] (https://stackoverflow.com/help/privileges/comment); Au lieu de cela, [fournissez des réponses qui ne nécessitent pas de précisions de la part du demandeur] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- je-fais-à la place). - [À revoir] (/ review/low-quality-posts/16881326) –

+0

@JohnMoutafis - veuillez revoir. Il fournit une réponse, mais peut ne pas l'avoir été avant la modification. – Frits