使用react-dropzone (https://www.npmjs.com/package/react-dropzone)并将文件记录到控制台,但无法在状态更改时获取图像预览。知道我做错了什么吗?
export default class JoinForm extends Component {
constructor(props) {
super(props)
this.state = {
imageFiles: []
}
}
onDrop(imageFiles) {
this.setState({
imageFiles: imageFiles
})
console.log(imageFiles)
}
render() {
return(
<form className='join-form' ref='joinForm' autoComplete='off'>
<Dropzone
onDrop={this.onDrop}
className='dropzone'
activeClassName='active-dropzone'
multiple={false}>
<div>Drag and drop or click to select a 550x550px file to upload.</div>
</Dropzone>
{this.state.imageFiles.length > 0 ? <div>
<h2>Uploading {this.state.imageFiles.length} files...</h2>
<div>{this.state.imageFiles.map((file) => <img src={file.preview} /> )}</div>
</div> : null}
</form>
)
}};
发布于 2016-07-14 03:57:48
正确的答案是:做一个傀儡,忘记绑定这个。
<Dropzone
onDrop={this.onDrop.bind(this)} //<= Here
className='dropzone'
activeClassName='active-dropzone'
multiple={false}
style={imageUploadStyle}>
<div>Drag and drop or click to select a 550x550px file to upload.</div>
</Dropzone>发布于 2016-07-13 18:49:24
您将文件存储在imageFiles中,但在render方法中,您将映射到this.state.files数组。
更改:
<div>{this.state.files.map((file) => <img src={file.preview} /> )}</div>至:
<div>{this.state.imageFiles.map((file) => <img src={file.preview} /> )}</div>或者,因为您有这个常量const files = this.state.imageFiles,所以可以将前面提到的语句更改为:
<div>{files.map((file) => <img src={file.preview} /> )}</div>发布于 2016-07-13 18:50:25
将渲染函数更改为imageFiles
render() {
const files = this.state.imageFiles
return(
<form className='join-form' ref='joinForm' autoComplete='off'>
<Dropzone
onDrop={this.onDrop}
className='dropzone'
activeClassName='active-dropzone'
multiple={false}>
<div>Drag and drop or click to select a 550x550px file to upload.</div>
</Dropzone>
{this.state.imageFiles.length > 0 ? <div>
<h2>Uploading {this.state.imageFiles.length} files...</h2>
<div>{this.state.imageFiles.map((file) => <img src={file.preview} /> )}</div>
</div> : null}
</form>
)https://stackoverflow.com/questions/38349421
复制相似问题