Компонент UploadImage является немым компонентом.Он получает действие приставки, которое нужно вызвать для загрузки, и получает путь к файлу изображения, который это действие помещает в соответствующий редуктор, как только изображение поднято.Здесь он используется с обоими реквизитами:
<UploadImage onUpload={this.props.uploadNewArticleImage} image={this.props.newArticleBuffer.image}/>
Мой newArticleBuffer
-редуктор имеет image: null
, и после завершения загрузки он получит путь к изображению.Когда это происходит, мой компонент реагирует, больше не отображая счетчик.
Внутренне, UploadImage
выглядит так:
import React, { Component } from 'react';
export default class UploadImage extends Component {
constructor(props) {
super(props);
this.state = { file: "", loading: false};
this.onSubmit = this.onSubmit.bind(this);
this.onFileChange = this.onFileChange.bind(this);
}
onSubmit(e) {
e.preventDefault();
this.setState({loading: true});
this.props.onUpload(this.state.file);
}
onFileChange(event) {
this.setState({ file: event.target.files[0]});
}
render() {
let spinner = <div>Not Loading</div>
if(this.props.image == null && this.state.loading) {
spinner = <div>Loading</div>;
}
return (
<div>Image Upload Component
<input
type="file"
accept="image/*"
onChange={this.onFileChange} />
{spinner}
<button onClick={(e) => this.onSubmit(e)}>Upload Image</button>
</div>
);
}
}
Есть несколько проблем.Во-первых, я никогда не устанавливаю «загрузку» обратно на false
: мне нужно как-то сделать это, когда действие Redux завершено, но я не знаю, как это сделать.
Во-вторых, и что более важно,этот подход не будет работать, когда пользователь загружает изображение, но затем решает загрузить другой файл.image
больше не будет null
.