The following is my state.
this.state = {
text: "",
users: [
{id:1, name:"nawaf", words:["sami","nawaf"] },
{id:2, name:"khaled", words:["sad","ramy"] },
]
};
I need add new words in user by id 1 with setState
.
The following is my state.
this.state = {
text: "",
users: [
{id:1, name:"nawaf", words:["sami","nawaf"] },
{id:2, name:"khaled", words:["sad","ramy"] },
]
};
I need add new words in user by id 1 with setState
.
You can map the users object and update the relevant user, like:
this.setState(state => ({
...state,
users: state.users.map(user => user.id === 1 ? {
...user,
words: [...user.words, 'new', 'words']
} : user)
}))
You can add a word to a user like this (assuming words passed in is an array of new words)
addWords = (i, words) => {
this.setState(prevState => {
return {
users: [...prevState],
users[i]: {
...prevState.users[i],
words: [...prevState.users[i].words, ...words]
}
}
})
}
Then call it like this
<button onClick={() => this.addWords(userIndex, ["new","word"])}>
Add words
</button>
This way you can add words to any user
You can use a library like immutability-helper or with es6:
// ES6
const users = this.state.users.map(user =>
user.id === 1 ? {...user, words: ['new', 'words', 'can', 'be', 'push', 'here']} : user)
this.setState({users})
Using immutable-js will be like:
import update from "immutability-helper";
this.setState({
users: update(this.state.users, {
[1]: {words: {$push: ['new', 'items']}}
})
})