this.setState 在第一次尝试 onClick 事件时不会清除数组,必须执行两次才能清除数组

抽屉

处理组件的文档上传部分。用户可以拖放他们的文件进行上传,拖放区域下方是提交、取消按钮,以及他们将要提交的文件列表。取消按钮应该清除files数组。

但是,第一次单击时,由于文件仍在那里,它仍然会打印出文件名。再次单击它,它会删除文件。不知道为什么会发生这种情况。

有问题的函数是handleClick(event).

有趣的是,它会清除页面上所呈现的文件列表,但阵列仍显示为填充的视图console.loghandleClick(event)

import _ from 'lodash';
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { submitDocument } from '../../actions/documents';
import Dropzone from 'react-dropzone';

class SubmitDocuments extends Component {

    constructor() {
        super();
        this.state = {
            files: []
        }

        this.handleClick = this.handleClick.bind(this);
        this.handleSubmit = this.handleSubmit.bind(this);
        this.onDrop = this.onDrop.bind(this);
    }

    handleClick(event) {
        this.setState({
            files: []
        })
        console.log(this.state.files);

    }

    handleSubmit(event) {
        event.preventDefault();
        // console.log(this.state.files);
        // filesToBeSent.pus
    }

    onDrop(files) {
        // console.log(files);
        // files.push(this.state.files);
        this.setState({
            files
        });
    }

    render() {

        return (
            <form onSubmit={this.handleSubmit}>
                <div className='panel panel-default'>
                    <div className='panel-heading'>
                        <h4><strong>Submit Documents</strong></h4>
                    </div>

                    <div className='panel-body'>
                        <Dropzone className='dropzone' onDrop={this.onDrop}> 
                            <h3>Click to add files or drag files here to upload</h3>
                        </Dropzone>
                        <div>
                            {_.map(this.state.files, f =>
                                <h5 key={f.name}>{f.name} - {f.size} bytes</h5>
                            )}
                        </div>
                        <button type='submit' className='btn btn-primary'>Submit</button>
                        <button type='button' className='btn btn-danger' onClick={this.handleClick}>Cancel</button>
                    </div>
                </div>
            </form>
        ); 
    }
}

function mapStateToProps(state) {
    return {
        documents: state.home.documents
    }
}

export default connect(mapStateToProps, { submitDocument })(SubmitDocuments);
布兰登

setState 可以异步运行。

尝试将您的处理程序更改为:

handleClick(event) {
    this.setState({
        files: []
    }, () => console.log(this.state.files));
}

您的控制台语句现在应该在第一次单击时打印您期望的内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

React React setState在第一次尝试时不会更新

反应setState不在第一次触发

对setState的第二次调用会阻止对setState的第一次调用执行

onClick 事件在第一次点击时不起作用

反应开关输入在第一次单击时未触发SetState

第一次没有读取React内部的setState函数

如何在第一次渲染的 setState 之后获取评论的值?

异步JS:按钮需要按两次才能执行onClick()。onClick() 触发 2 个函数,但在第一次单击时只执行一个

OnClick 侦听器仅在第一次单击时更新回收器视图

第一次单击MaterialUI FormControl API TextField时onClick不起作用

Onclick javascript 函数在第一次点击时不起作用

反应 onClick 不会在第一次点击时触发,第二次点击很好

为什么我的 onclick 功能只在第一次点击后才起作用?

为什么Onclick函数仅适用于每个循环的第一次迭代

jquery附加的div onclick第一次不起作用

文件上传对话框第一次不显示onclick

onclick不适用于第一次单击

ng-submit / ng-onclick仅在第一次工作

onClick不适用于第一次单击

尝试递归问题(我第一次)

第一次尝试C,标题问题

Cloudinary第一次尝试返回空URL

第一次尝试 RSepc 没有运气

第一次尝试运行KIVY

第一次尝试无法访问iframe

第一次尝试php Joomla!插入

“OnClick”功能在第一次点击时没有运行,需要第二次点击

单击按钮不会在第一次单击时更新this.setState;第二次点击更新

必须单击两次才能激活 onclick 事件 JavaScript