【发布时间】:2020-02-22 22:40:08
【问题描述】:
我在state 中有一个obj,默认情况下都是false:
obj: {
field1: false,
field2: false,
field3: false
}
我想在submit之后全部设置为true,都是动态的:
handleSubmit = (e) => {
e.preventDefault();
const doValid = {
field1: true,
field2: true,
field3: true,
}
//this is static, in real code it comes from validator and decide to be false or true
for (let i = 0; i < Object.keys(doValid).length; i++) {
this.handleValid(Object.keys(doValid)[i], Object.values(doValid)[i]);
}
}
这是我将每个state 动态设置为true:
handleValid = (type, v) => {
this.setState({
...this.state,
obj: { ...this.state.obj,
[type]: [v]
}
})
}
如您所见,我为此使用了[type] 和[v],但是问题:
- 当我点击提交按钮时,状态不会更改为
true(我知道更改状态可能是延迟) (如果我正确忽略了这个) - 如果我再次点击,现在我看到最后一项更改为
true,但这里有两个问题:
a:为什么最后一项改变了?
b:为什么会变成这样?带括号,使它成为array,但它只是一个动态来决定它是真还是假:
field1: false
field2: false
field3: [true]
应该是这样的:
field1: true
field2: true
field3: true
(请在 jsfiddle 中查看控制台日志)
【问题讨论】:
标签: javascript reactjs