以下是我的状态。
this.state = {
text: "",
users: [
{id:1, name:"nawaf", words:["sami","nawaf"] },
{id:2, name:"khaled", words:["sad","ramy"] },
]
};
我需要使用setState
在ID为1的用户中添加新单词。
答案 0 :(得分:0)
您可以映射用户对象并更新相关用户,例如:
this.setState(state => ({
...state,
users: state.users.map(user => user.id === 1 ? {
...user,
words: [...user.words, 'new', 'words']
} : user)
}))
答案 1 :(得分:0)
您可以像这样向用户添加一个单词(假设传入的单词是一个新单词数组)
addWords = (i, words) => {
this.setState(prevState => {
return {
users: [...prevState],
users[i]: {
...prevState.users[i],
words: [...prevState.users[i].words, ...words]
}
}
})
}
然后这样称呼
<button onClick={() => this.addWords(userIndex, ["new","word"])}>
Add words
</button>
这样,您可以向任何用户添加单词
答案 2 :(得分:-1)
您可以将immutability-helper之类的库或与es6一起使用:
// ES6
const users = this.state.users.map(user =>
user.id === 1 ? {...user, words: ['new', 'words', 'can', 'be', 'push', 'here']} : user)
this.setState({users})
使用immutable-js就像:
import update from "immutability-helper";
this.setState({
users: update(this.state.users, {
[1]: {words: {$push: ['new', 'items']}}
})
})