【发布时间】:2016-11-07 23:15:08
【问题描述】:
我有一个简单的文件上传实用程序,为此我使用react-dropzone,并结合使用material-ui LinearProgress 栏来显示进度。
下面显示的是我创建的组件,它与 LinearProgress 栏一起呈现文件上传实用程序。
我正在使用superagent 库使用多部分表单数据将后端实际上传到后端。超级代理的请求允许回调或事件处理程序用于上传进度。在我的代码中,进度事件处理程序被成功调用并由 console.log 语句证明。在每次进度调用中,我都会更新 LinearProgress 栏使用的 this.state.completed 属性。
问题是进度条不前进。我肯定错过了一些非常简单的东西。
非常感谢任何帮助,并提前感谢您。
import React, {Component} from 'react';
import Dropzone from 'react-dropzone';
import request from 'superagent';
import LinearProgress from 'material-ui/LinearProgress';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
export default class MultiFileUpload extends Component {
constructor(props) {
super(props);
this.state = {
completed: 0,
};
}
onDrop(files) {
console.log('Received files: ', files);
this.state.completed = 0;
var data = new FormData();
var req = request.post('/nltools/v1/files/upload');
files.forEach((file)=> {
data.append('files[]', file, file.name);
});
req.on('progress', (p) => {
console.log('Last percentage', this.state.completed);
var percent = Math.floor(p.percent);
if (percent >= 100) {
this.setState({completed: 100});
console.log('Done 100%');
} else {
this.setState({completed: percent});
this.state.completed = percent;
console.log('Percentage done: ', percent);
}
});
req.send(data);
req.end(function(err, res){
this.state.completed = 0;
console.log("Successfully uploaded");
});
}
render() {
var thisStyle = {
borderWidth: 4,
borderColor: "orange",
borderStyle: "dashed",
borderRadius: 4,
margin: 30,
padding: 30,
height: 300,
transition: "all 0.5s"
};
var progressStyle = {
margin: 30,
passing: 30,
};
return (
<div>
<div style={progressStyle}>
<MuiThemeProvider>
<LinearProgress color="orange" mode="determinate" value={this.state.completed} />
</MuiThemeProvider>
</div>
<Dropzone onDrop={this.onDrop} className="dropzone-box" style={thisStyle}>
<div>Try dropping some files here, or click to select files to upload. {this.state.completed}</div>
</Dropzone>
</div>
);
}
}
【问题讨论】:
标签: reactjs react-jsx material-ui