Nocebo
Nocebo

Reputation: 2017

React add property to immutable object

I'm trying to add a new property to objects within an array. My idea was to do something like this:

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/>)
    }
}

I want members to stay/remain immutable, yet adding another property to every object within this array. What am I doing wrong here? Thanks!

Upvotes: 2

Views: 15579

Answers (2)

Prakash Sharma
Prakash Sharma

Reputation: 16472

You are not storing returned value of map to members variable

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};
    };

Upvotes: 7

ta11ey
ta11ey

Reputation: 41

The array prototype .map() does not mutate the original array, but returns a new array.

Upvotes: 1

Related Questions