首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React-Dropzone图像预览不显示

React-Dropzone图像预览不显示
EN

Stack Overflow用户
提问于 2016-07-13 18:43:28
回答 3查看 21.6K关注 0票数 11

使用react-dropzone (https://www.npmjs.com/package/react-dropzone)并将文件记录到控制台,但无法在状态更改时获取图像预览。知道我做错了什么吗?

代码语言:javascript
复制
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>
    )
}

};

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-14 03:57:48

正确的答案是:做一个傀儡,忘记绑定这个。

代码语言:javascript
复制
<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>

https://toddmotto.com/react-create-class-versus-component/

票数 14
EN

Stack Overflow用户

发布于 2016-07-13 18:49:24

您将文件存储在imageFiles中,但在render方法中,您将映射到this.state.files数组。

更改:

代码语言:javascript
复制
<div>{this.state.files.map((file) => <img src={file.preview} /> )}</div>

至:

代码语言:javascript
复制
<div>{this.state.imageFiles.map((file) => <img src={file.preview} /> )}</div>

或者,因为您有这个常量const files = this.state.imageFiles,所以可以将前面提到的语句更改为:

代码语言:javascript
复制
<div>{files.map((file) => <img src={file.preview} /> )}</div>
票数 8
EN

Stack Overflow用户

发布于 2016-07-13 18:50:25

将渲染函数更改为imageFiles

代码语言:javascript
复制
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>
    )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38349421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档