【问题标题】:React SetState doesn't call renderReact SetState 不调用渲染
【发布时间】:2016-07-20 09:51:42
【问题描述】:

我将我的函数发送到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 期间,一切都正确呈现。

怎么办?谢谢。

【问题讨论】:

  • “做什么”、“正确安装一切”……等等——它们不是在 StackOverflow 上提出的正确问题。请花一些时间根据帮助中心的输入来编辑您的问题:stackoverflow.com/help/mcve

标签: reactjs callback render setstate


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    首先确保运行以下 . . .

    npm install --save underscore
    

    然后导入下划线。 . .

    import _ from 'underscore';
    

    然后克隆对象。

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

    【讨论】:

      猜你喜欢
      • 2021-04-21
      • 2019-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 2017-11-01
      • 2017-07-23
      • 1970-01-01
      相关资源
      最近更新 更多