【发布时间】:2020-01-30 14:22:59
【问题描述】:
(反应 16.8.6) 我的问题是,当变量更改时,即使我不调用任何 setState,它也会自动更改状态。在我分配值的 handleInputChange 中,它会自动更新状态 clientsData 和 addedClientsData 。我只想更新editedClientsData。
代码如下:
1 - 设置状态(点击按钮触发):
getClients(calls) {
axios.all(calls)
.then(responseArr => {
let cleanedDate = []
responseArr.map(el => {
cleanedDate.push(el.data.data)
})
this.setState({
clientsData: cleanedDate,
editedClientsData: cleanedDate,
loading: false
})
this.loadDataChart()
});
}
2 - 加载输入字段
render(){
return (...
this.state.editedClientsData.map(this.renderInput)
...)
}
renderInput = (client, i) => {
const { activeYear } = this.state
return (<tr key={client.id}>
<td>{client.name}</td>
<td><Input
type="number"
name={client.id}
id="exampleNumber"
placeholder="number placeholder"
value={client.chartData[activeYear].r}
onChange={this.handleInputChange}
/></td>
<td>{client.chartData[activeYear].x}</td>
<td>{client.chartData[activeYear].y}</td>
</tr>
)
}
handleInputChange(event) {
let inputs = this.state.editedClientsData.slice();
const { activeYear } = this.state
for (let i in inputs) {
if (inputs[i].id == event.target.name) {
inputs[i].chartData[activeYear]['r'] = parseFloat(event.target.value)
console.log(inputs)
// this.setState({ editedClientsData: inputs })
break;
}
}
}
我尝试分配一个固定号码 我试图保存为 const {clientsData} = this.state ,更新editedClientsData 和 this.setState({clientsData})
所有这些测试都失败了。希望对您有所帮助,谢谢!
【问题讨论】:
-
您的
for .. in循环没有意义,您是否尝试修改数组中的每个值? -
其实这是最后一次测试..第一个版本没有循环,只有
let { editedClientsData } = this.stateconst { clientsData, activeYear } = this.stateeditedClientsData[index].chartData[activeYear][data] = parseFloat(event.target.value)但是这段代码也失败了..我得到了同样的错误结果。跨度> -
是的,因为如果您使用索引,那么您将尝试更新数组中的所有项目。那么你怎么知道哪个项目需要编辑呢?
标签: javascript reactjs