项目中有需求,点加号就动态添加一栏,麻烦的写法是写三个方法,分别点击然后添加,为了方便,于是想用一个方法,然后通过传不同的参数来判断,做对应的操作
例如下图,框出来的都可以用变量去做,
1.错误写法
let index = this.state[`${val}_index`]+1
let rows = this.state[`${val}_rows`]
this.setState({
...this.state,
rows : [...this.state.rows , {id: index }],
index
})
写完后发现,变量名rows和index并没有解析成变量而是被解析成字符串添加到this.state里面了,于是这个方法不行
2/正确写法
handleAddSbi(e,val) {
let obj = {}
obj[`${val}_index`] = this.state[`${val}_index`]+1
obj[`${val}_rows`] = [...this.state[`${val}_rows`],{id: this.state[`${val}_index`]}]
this.setState({
...this.state,
...obj
})
}
此方法可以动态给对象名和对象属性赋值