Javascript React:更新处于状态的对象的属性

Javascript React:更新处于状态的对象的属性,javascript,reactjs,Javascript,Reactjs,我有一个将文档作为状态跟踪的组件,aDocuments。单击按钮时,将上载文档。每个文档对象都包含处理上载的功能。在上载过程中,文档中的模式从“新建”更改为“上载”,再更改为“完成”。文档对象在上载期间更新模式。每个文档都是来自aDocuments数组中处于my状态的对象的引用 当一个对象可以更新自身时,如何正确地处理状态中对象的更新属性?我的setState调用只会导致渲染 Doc.prototype.upload = function (uploadComplete) { if (thi

我有一个将文档作为状态跟踪的组件,
aDocuments
。单击按钮时,将上载文档。每个文档对象都包含处理上载的功能。在上载过程中,文档中的模式从“新建”更改为“上载”,再更改为“完成”。文档对象在上载期间更新模式。每个文档都是来自aDocuments数组中处于my状态的对象的引用

当一个对象可以更新自身时,如何正确地处理状态中对象的更新属性?我的setState调用只会导致渲染

Doc.prototype.upload = function (uploadComplete) {
  if (this.mode === 'new') {
    this.mode = 'uploading';
    // do uploading stuff and call uploadComplete after upload is finished
    $.ajax(..., complete: function() {
      this.mode = 'done';
      uploadComplete(this); 
    });
  }
}

// in my component
clickHandler: function (doc) {

  doc.upload(function(tmpDoc) {
    // this will cause render to show the doc as done
    this.setState('aDocuments', this.state.aDocuments);
  });

  // this will show the document as uploading
  this.setState('aDocuments', this.state.aDocuments);
}

任何帮助都将不胜感激。

为了更新文档数组所在的顶级组件的状态,您需要通过props(修改顶级文档数组)将回调函数传递给各个文档组件。

我正在这样做。它是获取用户单击上载按钮的事件的顶级组件。然后该组件对文档调用upload方法,该方法将文档的状态从new更改为upload,然后最终更改为done。“当我的文档对象共享对处于我状态的文档对象的引用时,它正在更改自己的信息,这似乎是错误的。@Brian我理解你所说的感觉“错误”是什么意思,但react使其自身倾向于单边数据流,并且状态在组件中被设计为孤立的,因此你几乎只剩下回调了。”就像马克说的。如果你想整理一下,你可以使用spread属性:还有componentWillReceiveProps——我倾向于(不管是好是坏)设置某些传入的道具在传递时的状态。但不确定这是否对您有帮助。
this.mode=='uploading'
可能应该是
this.mode='uploading'谢谢你的关注。这不是我真正的代码,只是我写的一些东西来让大家明白这一点。再次感谢。