React-Dropzone 图像预览不显示
React-Dropzone image preview not showing
使用 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>
)
}
};
您将文件存储在 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>
将渲染函数更改为 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>
)
正确答案:是个假人,忘了绑定这个。
<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>
使用 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>
)
}
};
您将文件存储在 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>
将渲染函数更改为 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>
)
正确答案:是个假人,忘了绑定这个。
<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>