我有一个文件上传组件,如下所示:
import React from 'react';
import ReactDOM from 'react-dom';
export default class FileUploadForm extends React.Component{
render (){
return (
<div class="row">
<div class="file-field input-field">
<div class="btn">
<span>Browse</span>
<input type="file" multiple onChange={this.onChange.bind(this)} ref = "file"/>
</div>
<div class="file-path-wrapper">
<input class="file-path validate" type="text" placeholder="Upload multiple files" />
</div>
</div>
</div>
);
}
onChange(e){
console.log("FileUploadForm: upload files selected")
let files = e.target.files;
if(files.length == 0){
return
}
console.log(files[0]);
this.props.onFileUploadRequested(files);
}
}
以下是将其连接到redux的容器:
import { connect } from 'react-redux';
import { uploadFiles } from '../actions.js';
import FileUploadForm from '../components/FileUploadForm';
const mapStateToProps = (state, ownProps) => {
return {
}
}
const mapDispatchToProps = (dispatch, ownProps) => {
return {
onFileUploadRequested: (files) => {
dispatch(uploadFiles(files));
}
}
}
const FileUploadContainer = connect(
mapStateToProps,
mapDispatchToProps
)(FileUploadForm);
export default FileUploadContainer;
我正在使用具有Toast组件的materialize CSS。
// Materialize.toast(message, displayLength, className, completeCallback);
Materialize.toast('I am a toast!', 4000) // 4000 is the duration of the toast
我点击了一个API来上传图片,告诉他们调用是否失败或成功。然后我调度将状态字段(fileUploadStatus)更改为:
的操作此字段的初始值为READY。
我不确定如何在上传成功或失败时显示吐司。
以下是我的疑问:
我是开发单页面应用程序的完全初学者,并且只具备javascript的工作知识。我现在坚持了很长一段时间。如果您觉得我的知识存在一些差距,请建议。
答案 0 :(得分:0)
1)有很多方法可以解决这个问题。对我有用的是通过context
公开toast
函数,它位于最顶层的组件中。在React中,context
应该谨慎使用,但这种情况是可以接受的IMO。例如:
class App extends Component {
toast() {
...
}
getChildContext() {
return {
toast: this.toast
};
}
render() {
return (
<Child />
);
}
}
App.childContextTypes = {
toast: PropTypes.func
};
class Child extends Component {
...
onSomeEvent() {
this.context.toast('Something happened.');
}
}
Child.contextTypes = {
toast: PropTypes.func
};
2)Materialize.toast()
有一个可选的回调函数作为第四个参数,你可以随意使用它。在这种情况下,它可用于还原您的fileUploadStatus
。