2

我将我的函数发送到子组件callBack。在父级中,我有一个带有setState方法的函数:

onInputUpdated(id){
  var array = {};
  let char = id.slice(-1);
  console.log(this.state.states)
  switch(char){
    case 'a':
      array[id] = this.getY(ReactDOM.findDOMNode(this.refs[id].refs.inp).value);
      break;
    case 'b':
      array[id] = this.getX(ReactDOM.findDOMNode(this.refs[id].refs.inp).value);
      break;
  }

  let oldStates = this.state.states;
  oldStates[id] = array[id];

  this.setState({
    states: oldStates
  });
  console.log(oldStates);
}

对象在哪里states

在此之后,states设置。我可以在下一个看到它,在callBack那里我打印到控制台。但是,render不会调用该方法。在 期间componentMount,一切都正确呈现。

该怎么办?谢谢。

4

2 回答 2

4

当您这样做时,let oldStates = this.state.states;您只是将oldStates变量作为对 的引用this.state.states,因此您在调用之前有效地更改了状态setState

例如,尝试制作它的副本,或者如果您需要深度克隆,请let oldStates = Object.assign({}, this.state.states使用lodash或类似的东西。

于 2016-07-20T09:56:30.563 回答
-1

我认为您正在设置它,然后再次设置它。尝试创建一个全新的对象实例。这是使用下划线的方法。

首先确保您运行以下 . . .

npm install --save underscore

然后导入下划线。. .

import _ from 'underscore';

然后克隆对象。

let oldStates = _.clone(this.state.states);
于 2016-07-20T10:04:36.090 回答