意外的反应组件状态值更改

时间:2018-08-17 11:06:21

标签: javascript reactjs

我正在尝试更新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)     ...

3 个答案:

答案 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扩展符号来克隆对象并对其进行操作,然后再分配回状态。