2 回答
TA贡献1843条经验 获得超7个赞
如果你的浏览器支持 spread syntax,那么更新的对象可以通过该语法和Array#reducemodels
获得,如下所述:
onButtonClick(e){
const key = e.target.getAttribute('model');
// Get reference to current models object in state
const models = this.state.models;
// Compose new state object by..
const state = {
models :
Object
.keys(models) // Get list of keys in model
.reduce((result, k) => {
// Reduce keys to object of key/value pairs
// where key match is set to true
return { ...result, [k] : key === k };
}, {})
}
this.setState(state)
}
TA贡献1804条经验 获得超2个赞
您可以使用计算对象属性来使其工作。this.setState进行浅合并,您将不得不将嵌套的属性展开一层深。
onButtonClick(e){
const key = e.target.getAttribute('model');
this.setState({
models:{
// spread all the properties for models
...this.state.models,
[key]: true // set the key prop to false
}
})
}
如果我们想确保其他属性始终为假,则在设置状态之前覆盖这些值。
onButtonClick(e){
const key = e.target.getAttribute('model');
const updatedModels = Object.entries(this.state.models)
.reduce((memo, [currKey]) => {
if(currKey === key) {
memo[currKey] = true;
} else {
memo[currKey] = false;
}
return memo;
}, {});
this.setState({
models: updatedModels
})
}
添加回答
举报