私はreact-dropzoneを使用している単純なファイルアップロードユーティリティを持っていますが、これに併せてmaterial-ui LinearProgressバーを使用して進捗状況を表示したかったのです。Material-UI LinearProgressバーが動作しません
以下に示すのは、ファイルアップロードユーティリティとLinearProgressバーをレンダリングするコンポーネントです。
私はsuperagentライブラリを使用して、マルチパートフォームデータを使用して実際にバックエンドにバックエンドをアップロードしています。スーパーエージェントの要求は、アップロードの進行状況のためのコールバックまたはイベントハンドラを許可します。私のコードでは、progressイベントハンドラは正常に呼び出され、console.logステートメントによって証明されます。各進行コールで、this.state.completed属性をLinearProgressバーで使用するように更新します。
問題は進行状況バーが前進しないことです。私は間違いなく非常に単純なものを見逃しています。
ご協力いただきまして誠にありがとうございます。
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 = {
\t \t borderWidth: 4,
\t \t borderColor: "orange",
\t \t borderStyle: "dashed",
\t \t borderRadius: 4,
\t \t margin: 30,
\t \t padding: 30,
\t \t height: 300,
\t \t 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>
);
}
}
これはうまくいきました。私はこれをonDrop自身より進歩に結びつけようとしていました。私はthis.state.completed = xyzのように状態を変更しない方法についてこの質問を投稿した後に学んだ – user320599