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