我正在尝试更新state
的值,但是首先我将其加载到另一个var
中,并且在对新的var
进行更改之后,它将转到setState
,更新原始的state
值。但是对温度var
所做的意外更改已经更改了component
state
的值!
var postData = this.state.postData;
postData.likes = postData.likes + 1;
console.log(postData.likes, this.state.postData.likes);
console.log
值:
(1,1)
(2,2)
...
答案 0 :(得分:1)
由于postData
是一个对象,因此请勿直接将其保存在另一个变量中,因为这将创建对状态中该对象的引用,而不是副本。而且,如果这是参考,则更改一个将更改它们都指向同一对象的其他cos。
首先制作一个副本”
var postData = Object.assign({}, this.state.postData)
,然后进行更改。然后,完成后,使用setState({postData})
答案 1 :(得分:1)
永远不要更改状态,始终使用setState,并且复制对象用户的传播符号“ ...”
textNodes <- c('<text top="109" left="413" width="70" height="15" font="7">\n <b>Hello</b>\n</text>',
'<text top="109" left="423" width="70" height="15" font="7">\n <b>Hello</b>\n</text>',
'<text top="109" left="423" width="70" height="15" font="7">\n <b>Hello</b>\n</text>',
'<text top="109" left="423" width="70" height="15" font="7">\n <b>Hello</b>\n</text>',
'<text top="109" left="400" width="70" height="15" font="7">\n <b>Hello</b>\n</text>',
'<text top="109" left="413" width="70" height="15" font="7">\n <b>Hello</b>\n</text>')
(want <- sort(table(unlist(lapply(textNodes, function(x) {
dummy <- strsplit(gsub("[\n\"]", "", x), " ")[[1]]
substr(dummy[substr(dummy, 1, 5) == "left="], 6, length(dummy))
}))), dec = TRUE)[1:2])
#423 413
# 3 2
答案 2 :(得分:0)
您还可以使用var postData = {...this.state.postData};
之类的ES2018扩展符号来克隆对象并对其进行操作,然后再分配回状态。