Javascript React-使用setInterval确定范围问题

Javascript React-使用setInterval确定范围问题,javascript,reactjs,Javascript,Reactjs,我有一个组件,基本上作为一个完全独立的文件上传。目前,在上传机制就位之前,我只是使用计时器来模拟进度变化。但是,当它达到100%并尝试向其父级发送消息时(通过statusChange),我遇到了一个范围问题,此指的是窗口。我怎样才能解决这个问题 实际误差: 未捕获类型错误:\ this.props.statusChange不是一个函数 编辑: 问题似乎在于回调的传递this.props.statusChange在整个过程中确实为空 啊,该死!这是一个范围问题。我将在下面强调这一点: Upload

我有一个组件,基本上作为一个完全独立的文件上传。目前,在上传机制就位之前,我只是使用计时器来模拟进度变化。但是,当它达到100%并尝试向其父级发送消息时(通过
statusChange
),我遇到了一个范围问题,
指的是
窗口
。我怎样才能解决这个问题

实际误差:

未捕获类型错误:\ this.props.statusChange不是一个函数

编辑: 问题似乎在于回调的传递
this.props.statusChange
在整个过程中确实为空

啊,该死!这是一个范围问题。我将在下面强调这一点:

UploadQueue = React.createClass({
  displayName: 'UploadQueue',

  propTypes: {
    fileList: React.PropTypes.any.isRequired
  },

  statusChange(status) {
    debugMode && console.info('[UploadQueue] Status change! %o', status);
  },

  render() {
    let files = [];

    // Convert to a true array
    for (let i = 0; i < this.props.fileList.length; ++i) {
      files = files.concat(this.props.fileList[i]);
    }

    return (
      <div>
        {files.map(function (file) { // should be: {files.map(file => {
          return <FileUpload key={file.name}
                             name={file.name}
                             statusChange={this.statusChange} />
        })}
      </div>
    )
  }
});
UploadQueue=React.createClass({
displayName:“上载队列”,
道具类型:{
文件列表:React.PropTypes.any.isRequired
},
状态更改(状态){
debugMode&&console.info('[UploadQueue]状态更改!%o',状态);
},
render(){
让文件=[];
//转换为真数组
for(设i=0;i{
返回
})}
)
}
});
试试这个:

componentDidMount() {
  this.timer = setInterval(() => {
    this.setState({progress: this.state.progress + 5});
    if (this.state.progress === 100) {
      clearInterval(this.timer);
      this.props.statusChange({uploadComplete: true});
    }
  }.bind(this), 1000);
   ^^^^^^^^^^^^  
  debugMode && console.info('[FileUpload] Began uploading %s',
    this.props.name);
},

作用域问题出现在拥有
文件上载的组件中。修复了下面的代码

{files.map(file => {
  return <FileUpload key={file.name}
                     name={file.name}
                     statusChange={this.statusChange} />
})}
{files.map(文件=>{
返回
})}

这没有效果。.这是多余的,因为我已经在使用ES6
=>
语法。您的调试消息打印正确吗?您能验证
组件安装中的
这个
是否正确吗?代码对我来说似乎很好。是的,
控制台.info
打印得很好。奇怪的是,e> if(this.state.progress==100)
检查也可以正常工作。我不明白。等等,那么错误是否真的包含了那个初步下划线?就像在
\u this.props.statusChange
中一样?@HawkenRives我确信它来自一个传输源。@ffxsam如果你运行一个调试器并在
setInterval
处理程序中中断,
this.props
有任何错误吗你到底在那里干什么?
{files.map(file => {
  return <FileUpload key={file.name}
                     name={file.name}
                     statusChange={this.statusChange} />
})}