reactjs - 如何在使用扩展运算符时使用 setState 更新多个状态变量?
问题描述
在我的组件中,状态如下所示:
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))
}
推荐阅读
- dom - Webapp按钮在谷歌表格中复制表格
- dynamics-crm - 模型驱动的 PowerApps
- ios - RealmSwiftObject 不由 Realm 管理。获取返回类的对象
- haskell - 在 Haskell 中,如何将一个类似列表的 monad 绑定到另一个类似列表的 monad
- typescript - 为什么 TypeScript 既有 `void` 又有 `undefined`?
- java - Webview 应用程序检查网络并在没有网络时显示“无互联网连接”,并在网络可用时重新加载
- javascript - 使用 JavaScript 设置的表单值验证失败
- c++ - 在循环中使用初始化列表是否有效?如果没有,它是如何失败的,为什么?
- python - Python嵌套字典更新任何嵌套键匹配的值
- r - 使用 R 中的样本按列和行对矩阵进行采样