React SetState 不调用渲染

IT技术 reactjs callback render setstate
2021-05-23 02:06:02

我将我的函数发送到子组件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设置。我可以在 next 中看到它callBack,在那里我打印到控制台。但是,render不会调用方法。在 期间componentMount,一切都正确呈现。

该怎么办?谢谢。

2个回答

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

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

我认为您正在设置它然后再次设置它。尝试创建一个全新的对象实例。以下是如何使用underscore 进行操作

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

npm install --save underscore

然后导入下划线。. .

import _ from 'underscore';

然后克隆对象。

let oldStates = _.clone(this.state.states);