2017-08-17 3 views
0

J'essaie d'ajouter une nouvelle propriété aux objets dans un tableau. Mon idée était de faire quelque chose comme ceci:React ajouter une propriété à l'objet immuable

class Foo extends Component { 
    constructor(props) { 
     super(props); 

     this.state = this.getInitialState(); 
     console.log(this.state); //Property "label" is missing in "members" array 
    } 

    /** 
    * Get initial state 
    * @returns {{title, description}} 
    */ 
    getInitialState =() => { 
     let members = this.props.members.slice(); 
     members.map((member) => { 
      return { 
       ...member, 
       label: (member.firstName + " " + member.lastName) 
      } 
     }); 
     console.log(members); //"label" is not a property of objects 

     return {title: "", description: "", responsible: [], typeOf: null, 
       members: members}; 
    }; 

    render() { 
     return (<div/>) 
    } 
} 

Je veux members de rester/rester immuable, mais l'ajout d'une autre propriété à chaque objet dans ce tableau. Qu'est-ce que je fais mal ici? Merci!

Répondre

3

Vous n'êtes pas stocker retourné valeur de carte aux membres variables

getInitialState =() => { 
     let members = this.props.members.map((member) => { 
      return { 
       ...member, 
       label: (member.firstName + " " + member.lastName) 
      } 
     }); 
     console.log(members); //"label" is not a property of objects 

     return {title: "", description: "", responsible: [], typeOf: null, 
       members: members}; 
    }; 
+0

Wow, maintenant je me sens bête. Je vous remercie. Résolu – Nocebo

+1

Je vais;) Je dois attendre 5 min – Nocebo

+1

@Nocebo a ajouté une modification à la réponse pour montrer que, puisque 'Array # map' renvoie déjà un nouveau tableau, vous n'avez pas besoin d'utiliser' this.props.members. tranche() '. – philraj

1

Le prototype de tableau .map() ne mute pas le tableau original, mais retourne un nouveau tableau.

+0

Merci pour l'information. Va le chercher :) – Nocebo