关于setState使用的疑问

#1

在开发中发现个问题。。就是直接从state取出来的变量。。不能直接修改再设置到state里。。
比如。。

var {list} = this.state;
list.push({});
this.setState({list});

这样的话。State是会做更新 ,不过React不会识别state有更新了。。导致不会去触发render等事件。。而要写成

var list = assign({},this.state.list);
list.push({});
this.setState({list});

这样才生效

写成

var {list} = assign({},this.state);

这样也无效。。
有没什么好的方式?

#2

首先说说导致这样的原因: react是根据你state的状态有没有改变然后是否重新渲染的。而如果你需要对某个对象进行操作,只是对象内部的值改变了而已(对象的指针还是那个指针),所以要使render重新渲染,只要改变指针就OK了。除了上面你说的方式,还可以使用如: es6写法

   var {list} = this.state;
   //list是数组
   list.push({})
   list = [...list];
   this.setState({list})

  var {list} = this.state;
  //list是对象
  list.XX = ''
  list = {...list}
  this.setState({list})
#3

深复制,浅复制