antd Upload上传报Uncaught TypeError: items.map is not a function错误

2023-11-17

在写项目的时候,使用到了antd里面的Upload来上传文件,写好之后运行报错。。。
在这里插入图片描述
代码是这样的:

const uploadProps = {
    action: createTheURL('software/stu/score', 'upload'),
    method: 'POST',
    headers: { 
        authorization: tokenHandler.getSessionByKey('authorization') 
    },
    onRemove: this.handleRemove
}
<Form.Item
    label='附件'
>{getFieldDecorator('appendix', {
    initialValue: JSON.parse(appendix) || [],
    valuePropName: 'fileList',
})(<Upload {...uploadProps} >
        <a style={{ marginRight: 20 }}>
            <Icon type="plus" />添加附件
        </a>
        <span>(最多上传10个文件,单个文件不能超过20M)</span>
    </Upload>)}
</Form.Item>

造成这个问题的原因是,因为在上传了一个文件之后,会有产生一个新的fileList,但是这个新的fileList没有回传到Upload组件的fileList里面,所以只要我们把新的fileList给到Upload,那么这个问题就可以解决了。

最开始我的做法是,将fileList存到state里面,然后每次上传文件就会触发Upload的onChange函数,在onChange函数里面将新的fileList又通过使用setState将其存到state里面,最后在将state里面的fileList放到Upload里面。

代码大概就是这个样子:

handleChange = info => {
    const { fileList } = info;
    this.setSate({
        fileList
    });
}

render(){
    const { fileList } = this.state;
    const uploadProps = {
        action: createTheURL('software/stu/score', 'upload'),
        method: 'POST',
        headers: { 
            authorization: tokenHandler.getSessionByKey('authorization') 
        },
        fileList,
        onRemove: this.handleRemove,
        onChange: this.handleChange
    };
    
    return (
        <Form.Item
            label='附件'
        >
            <Upload {...uploadProps} >
                <a style={{ marginRight: 20 }}>
                    <Icon type="plus" />添加附件
                </a>
                <span>(最多上传10个文件,单个文件不能超过20M)</span>
            </Upload>
       </Form.Item>
    )
}

但是这样写,在后面还是会有一些问题,这里只用来处理新增表单数据没问题;但是如果是要对上传之后的表单数据进行一个修改的话就会出现问题,因为在修改的时候,需要先获取已经提交了的数据,对于已经上传了的文件需要先获取到文件名,生成fileList存到state里面,然后再放到Upload组件里面,如果这样写的话,最后就会发现整个流程就很混乱,而且也不一定完全没问题。

最终解决办法:

直接使用antd Form组件里面的getValueFromEvent方法,这个方法的作用就是把onChange的参数(Upload里面,这里的参数就是file和fileList)。

antd Form组件

我写的代码如下:

const uploadProps = {
    action: createTheURL('software/stu/score', 'upload'),
    method: 'POST',
    headers: { 
        authorization: tokenHandler.getSessionByKey('authorization') 
    },
    onRemove: this.handleRemove
}

<Form.Item
    label='附件'
>{getFieldDecorator('appendix', {
    initialValue: JSON.parse(appendix) || [],
    valuePropName: 'fileList', 
    getValueFromEvent: e => {
        if (Array.isArray(e)) {
            return e;
        }
    return e && e.fileList;
    }
})(<Upload {...uploadProps} >
       <a style={{ marginRight: 20 }}>
           <Icon type="plus" />添加附件
       </a>
       <span>(最多上传10个文件,单个文件不能超过20M)</span>
    </Upload>)}
</Form.Item>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

antd Upload上传报Uncaught TypeError: items.map is not a function错误 的相关文章

  • JW Player javaScript API 不工作

    我使用 jwplayer version 5 10 2295 和浏览器 chrome 25 My code jwplayer container setup file path width 300px height 100px autost
  • 如何实时改变setInterval的速度

    我想知道如何实时更改 setInterval 的速度 例如 if score lt 10 repeater setInterval function spawnEnemy 1000 if score gt 10 repeater setIn
  • axios 请求中未发送正文数据

    我试图通过 axios 请求将数据发送到我的后端脚本 但正文看起来是空的 这是前端发送的请求 axios request method GET url http localhost 4444 next api headers Authori
  • MailTo 从 Javascript

    我有一个链接按钮 用于从页面内容构建邮件 从 javascript 启动它而不打开空白窗口或干扰调用它的窗口的最佳方法是什么 function Email var sMailTo mailto var sBody var alSelecte
  • 使用 Jest 和 React JS TestUtils 测试表单

    我有一个带有 3 个单选按钮的表单 如下所示 假名
  • Eslint 从另一个文件确定全局变量

    我试图以这样的方式设置 ESLint 使其在对实际目标文件进行 linting 之前解析全局声明文件 这样我就不必将所有确实是全局的函数和变量声明为全局 而是让解析器弄清楚 In 一些 模块 js function do something
  • 使用 jQuery Select2 清除下拉菜单

    我正在尝试使用奇妙的方式以编程方式清除下拉菜单Select2 http ivaynberg github com select2 图书馆 使用 Select2 远程 ajax 调用动态填充下拉列表query option HTML
  • 在 R 传单中添加不透明度滑块

    如何在 R leaflet 应用程序中添加滑块来控制特定图层的不透明度 对于这个应用程序 我不想使用闪亮 这里建议 在 R 传单应用程序中添加滑块 https stackoverflow com questions 37682619 add
  • 设置双指缩放时精确的滚动位置

    我正在创建一个地图应用程序 它将标记图像放置在画布上并滚动到它 我正在使用浏览器的捏缩放和滚动来放大 缩小地图 然而 我注意到有一些奇怪的行为 我想知道如何解决它 这有点难以解释 但我们开始吧 假设您处于网页的标准缩放级别 无法进一步缩小
  • API 使用令牌向 odoo 进行身份验证

    我想使用令牌从 Express 应用程序向 Odoo 进行身份验证 我在用odoo xmlrpc https www npmjs com package odoo xmlrpc连接 Odoo 的节点模块 我的快递应用程序 Odoo 要求 A
  • JS 保留以零结尾的小数[重复]

    这个问题在这里已经有答案了 在JavaScript中 是否可以 锁定 十进制数 以保留以零结尾的 浮点数 例如 我有 2 个不同的数字 如下所示 伪代码 let a 1 0 let b 1 00 a b true should be fal
  • 模板中带有 ng-if 的 angularjs 指令

    我正在构建一个在模板内使用 ng if 的指令 奇怪的是 提供给链接函数的元素没有扩展ng if代码 它只是ng if的注释行 经过一番尝试 我发现通过将链接代码包装在 timeout 中似乎可以使其正常工作 但我想知道这是否不是正确的处理
  • 如何为我的整个 Node.js 应用程序使用相同的 MySQL 连接?

    我有一个app js 我从那里运行我的整个应用程序 在 app js 内部 我require许多文件中都有代码 对于每个文件 我都这样做 var mysql require mysql var mclient mysql createCon
  • Javascript 浮点乘以 100 仍然有错误

    我有一个货币字段的文本输入 我在字段中输入 33 91 并在尝试使用 乘以 100 技术时得到以下结果 var curWth parseInt trans withdraw index val 100 3390 var curWth par
  • ChartJs:如何按时间值(而不是像素)以编程方式平移

    我使用的是chartJs 3 6 1 和 Chartjs plugin zoom 1 2 1 但我认为这并不重要 我有 2 个时间序列折线图 当我通过拖放平移一个图表时 我也想移动 平移另一个图表 为此 我为 graphA 启用了缩放 平移
  • 尝试使用 Javascript 解决对称差异

    我正在尝试找出对称的解决方案 使用 javascript 完成以下任务的差异 目标 接受未指定数量的数组作为参数 保留数组中数字的原始顺序 不删除单个数组中数字的重复项 删除数组中出现的重复项 因此 例如 如果输入是 1 1 2 6 2 3
  • 使用 ref 触发反应 dropzone 不起作用

    我正在实现这个库 https github com felixrieseberg React Dropzone Component https github com felixrieseberg React Dropzone Compone
  • 以角度访问窗口 TemplateUrl 内的范围

    我的模式有一个 windowTemplateUrl 如下 div class modal fade div class modal dialog div class modal content square btn div div div
  • 如何在运行脚本之前提交活动单元格中所做的更改? (Google 表格/Google Apps 脚本)

    我正在使用 Google Apps 脚本在 Google 表格中创建提交表单 该表单位于一页上 提交内容被移至第二个隐藏页面 当用户填写表单后 他们按下提交页面上的按钮以激活脚本 我遇到的问题是 当用户填写最后一个单元格然后单击按钮时 输入
  • 如何在 Jquery/Javascript 中绑定模糊和更改,但只触发一次函数?

    我试图在选择元素更改时触发函数 由于 Ipad 在 on change 方面遇到问题 我还想绑定到 blur 这在 Ipad 上工作得很好 但是我不希望两个事件都触发该函数两次 所以我需要某种挂钩来确保两个事件是否都触发change and

随机推荐

  • 代码质量与安全

    在任何新的软件开发项目开始时 您就应该考虑软件安全 开始一个新项目或许会令人望而生畏 因为有许多的决定要做 有许多想法必须考虑清楚 通常来说 这些决定和想法包括了定义项目需求 选择正确的流程 选择正确的工具以及确保软件安全 为此 Perfo
  • 【Kettle】【使用Kettle存储数据】【csv_to_MySQL】【xlsx_to_MySQL】

    1 csv to MySQL csv xlsx表格内容如下 需要通过kettle导入MySQL中 在MySQL中创建相同与csv文件相同结构的表 kettle gt book 1 1CSV表输入设置 1 2表输出设置 注意这里如果预览数据
  • 基本增删改查(jquery Datatables+java)

    此例子展示基于Datatables的最新版1 10 5的服务器处理的增删改查 弹窗效果 结合Bootstrap显示表格 局部刷新数据 还应用了dom 自定义按钮 使表格和按钮看起来是一个整体 这个例子中还是用模板引擎 目的是为了掩饰在使用r
  • Linux编程语言glob函数,Linux中glob的用法

    bash中用于实现文件名 通配 通配符 1 任意长度的任意字符 a b aab ab a123b 可以 abc 不可以 2 任意单个字符 a b aab 可以 ab a12b abc 不可以 3 匹配指定范围内的任意单个字符 0 9 a z
  • AD altium designer 按照板子外形覆铜

    AD全是自学 遇到问题baidu 关于覆铜 之前一直看的视频 全都是选了覆铜自己画线 费劲还画不准确 尤其是异型板子还要直线曲线切来切去 其实大部分时候都是板子所有部分都要覆铜 今天终于找到如何不画线直接按照板子外形覆铜了 依次点选菜单栏的
  • Pycharm一个文件多次运行-allow parallel run

    在平时使用Pycharm的时候难免遇到同一个程序运行后 修改参数多次运行 我在平时使用的时候编写RabbitMQ的消费者程序 需要模拟多个消费者进行消费 因此一个程序需要运行数十个副本 在Pycharm里设置如下 View Appearan
  • Java 诊断神器 Arthas

    关于 Arthas Arthas 是一款开源在线 Java 诊断工具 采用命令行交互模式 支持 web 端在线诊断 同时提供丰富的 Tab 自动补全功能 进一步方便进行问题的定位和诊断 得益于 Arthas 强大且丰富的功能 让 Artha
  • mac charles4.0.2免费破解版安装

    mac charles4 0 2免费破解版安装 按相关步骤即可成功安装并使用 1 下载安装charles https www jianshu com p 4f0573f3c5db 2 安装成功之后相关配置 https www jianshu
  • python数据分页pandas,Python数据分析[3] - Pandas包

    Series Series是一个一维的向量 每个值都会有对应标签 该标签我们称之为Index Obj Series 4 5 7 8 Obj Out 5 0 4 1 5 2 7 3 8 dtype int64 Obj2 Series 4 5
  • 范数(norm) 几种范数的简单介绍

    转自 https blog csdn net a493823882 article details 80569888 https www zhihu com question 20473040 什么是范数 我们知道距离的定义是一个宽泛的概念
  • 华为OD机试 Python 观看表演

    题目 题目描述 小明爱看公园里的表演 为了庆祝一个特殊的节日 公园里会有很多并列的表演 但小明只能选择一个看 看完一场后 他需要至少15分钟才能跑到另一个地方看下一场 请帮他算一下 他最多能看几场表演 输入 第一行是一个数字 告诉你总共有多
  • MongoDB 核心技术详解

    一 NoSQL 概述 1 NoSQL 简介 NoSQL 全称是 Not Only Sql 指的是非关系型的数据库 这类数据库主要有这些特点 非关系型的 分布式的 开源的 水平可扩展的 原始的目的是为了大规模 web 应用 这场全新的数据库革
  • The breakpoint will not currently be hit. No symbols have been loaded for this document visual studi...

    问题1 环境设置问题 1 确认是在debug模式下运行 2 确认正确的项目设置 链接器 gt 调试 gt 生成调试信息 是 C gt 常规 gt 调试信息格式 Zi or Z7 问题2 当前代码与当前执行的程序不匹配 1 确认运行的是最新生
  • 2023美赛C题-Wordle预测思路及matlab代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab仿真内容点击 智能优化算法 神经网络预测 雷达通信
  • CSS中的弹性布局:flex

    1 flex布局 Flexible Box 1 1 任何一个容器都可以指定为flex布局 可以应用于 块级 元素 也可以用于行内元素 1 2 当父设置flex布局后 子元素的float clear vertical align属性将失效 2
  • 使用pnpm搭建workspace

    前言 上一节中我们使用vite lib打包了组件库 但发现对component调试时很不理想 而pnpm的workspace就是解决这种问题的 开始工作 在core view之上的根目录 建立pnpm workspace yaml 内容如下
  • STM32示波器设计

    目录 前言 1 硬件模块 2 示波器基础知识 2 1 当头一棒就是 波形的概念 2 2 第二就是需要观察的波形参数 2 3 第三就是示波器参数 2 3 1 采样率 2 3 2 带宽 2 3 4 刷新率 3 ADC采集和DAC输出 3 1 A
  • intel外设接口介绍(Intel Arria 10 Hard Processor System Technical Reference Manual)----SPI

    原文链接 https www intel com content www us en docs programmable 683711 21 2 features of the spi controller html 20 1 Featur
  • CSS 初始化 base.css 文件

    公共样式 body h1 h2 h3 h4 h5 h6 form fieldset div dl dt dd ul ol li input button textarea p th td a img strong margin 0px pa
  • antd Upload上传报Uncaught TypeError: items.map is not a function错误

    在写项目的时候 使用到了antd里面的Upload来上传文件 写好之后运行报错 代码是这样的 const uploadProps action createTheURL software stu score upload method PO