如何在使用扩展运算符时使用 setState 更新多个状态变量?
How can I update multiple state variables using setState while using the spread operator?
在我的组件中,状态如下所示:
this.state = {
userAnswers:{},
numAnswered:0
}
我有一个方法,当被调用时,应该在 userAnswers
中添加或重新设置一个键值对,它还应该将 numAnswered 增加 1
此代码有效:
handleUserAnswer = (questionId, answer) => {
this.setState(prevState => ({
userAnswers: {
...prevState.userAnswers,
[questionId]:answer
}
}),() => console.log(this.state))
this.setState(prevState =>({
numAnswered:prevState.numAnswered+1
}), ()=> console.log(this.state))
}
但是我怎样才能做到这一点而不必使用 setState 两次呢?例如,为什么以下不起作用?
handleUserAnswer = (questionId, answer) => {
this.setState(prevState => ({
userAnswers: {
...prevState.userAnswers,
[questionId]:answer,
numAnswered:prevState.numAnswered+1
}
}),() => console.log(this.state))
}
此处 numAnswered 的值未递增..
在第二种情况下,您在 userAnswers 中更新 numAnswered,而不是直接在状态中更新。试试这个:
handleUserAnswer = (questionId, answer) => {
this.setState(prevState => ({
userAnswers: {
...prevState.userAnswers,
[questionId]: answer,
}.
numAnswered:prevState.numAnswered + 1
}), () => console.log(this.state))
}
在我的组件中,状态如下所示:
this.state = {
userAnswers:{},
numAnswered:0
}
我有一个方法,当被调用时,应该在 userAnswers
中添加或重新设置一个键值对,它还应该将 numAnswered 增加 1
此代码有效:
handleUserAnswer = (questionId, answer) => {
this.setState(prevState => ({
userAnswers: {
...prevState.userAnswers,
[questionId]:answer
}
}),() => console.log(this.state))
this.setState(prevState =>({
numAnswered:prevState.numAnswered+1
}), ()=> console.log(this.state))
}
但是我怎样才能做到这一点而不必使用 setState 两次呢?例如,为什么以下不起作用?
handleUserAnswer = (questionId, answer) => {
this.setState(prevState => ({
userAnswers: {
...prevState.userAnswers,
[questionId]:answer,
numAnswered:prevState.numAnswered+1
}
}),() => console.log(this.state))
}
此处 numAnswered 的值未递增..
在第二种情况下,您在 userAnswers 中更新 numAnswered,而不是直接在状态中更新。试试这个:
handleUserAnswer = (questionId, answer) => {
this.setState(prevState => ({
userAnswers: {
...prevState.userAnswers,
[questionId]: answer,
}.
numAnswered:prevState.numAnswered + 1
}), () => console.log(this.state))
}