为什么 JavaScript 展开表示法在这里不起作用

2024-03-18

我正在学习 React,有一个我无法解决的简单问题。

我创建了一个代码沙盒 https://codesandbox.io/s/react-dropzone-sha256-5ngg7?file=/src/FileUpload.js

在图像中:file是一个键值数组,如图所示。

下面的代码运行后:

return { ...file, md5: SHA256(fileContents).toString() };

然后结果是键值对被删除,如下图所示:

如您所见,该文件现在只包含path and md5其他一切都消失了。

我知道这可能与浅复制原理有关,但我正在寻找解决方案,但不明白如何解决这个问题。

const FilePicker = ({ setNewFileForValidation }) => {
    const readFileContents = async file => {
        return new Promise((resolve, reject) => {
            const fileReader = new FileReader();
            fileReader.onload = () => {
                resolve(fileReader.result);
            };
            fileReader.onerror = reject;
            fileReader.readAsBinaryString(file);
        });
    };
    const readAllFiles = async AllFiles => {
        const results = await Promise.all(
            AllFiles.map(async file => {
                const fileContents = await readFileContents(file);
                return { ...file, md5: SHA256(fileContents).toString() };
            }),
        );
        console.log(results, 'resutls');
        return results;
    };

    function onDrop(acceptedFiles, rejectedFiles) {
        readAllFiles(acceptedFiles).then(result => {
            setNewFileForValidation(result);
        });
    }
    return <Dropzone onDrop={onDrop} />;
};

The file来自反应-dropzone https://react-dropzone.js.org/并包含文件选择器的结果。也许这就是这个传播副本不起作用的原因?


文件是一个特殊的对象,其属性是不可枚举的。因此扩展语法无法按预期工作。你需要克隆文件对象 https://stackoverflow.com/questions/51579163/how-to-clone-file-objects-in-javascript使用文件构造函数。

readAllFiles = async (AllFiles) => {
    const results = await Promise.all(
      AllFiles.map(async (file) => {
        const fileContents = await this.readFileContents(file);
        // THIS IS THE PROBLEM
        //return { ...file, md5: SHA256(fileContents).toString() };
        file = new File([file], file.name, { type: file.type })
        file.md5 = SHA256(fileContents).toString();
        return file;
      })
    );
    console.log(results, "result");
    return results;
  };
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 JavaScript 展开表示法在这里不起作用 的相关文章

随机推荐

  • 去除特定控制字符的 ruby​​ 字符串

    这非常简单 如何去除 ruby 字符串中的特殊字符 这是角色 http www fileformat info info unicode char 2028 index htm http www fileformat info info u
  • XTS 应用系列和多列 XTS?

    例如 我如何使用 apply 函数系列apply daily到多元 XTS 例如 Time a b 2012 02 11 16 21 24 4 7258 7 7258 2012 02 11 16 26 25 4 9096 12 3796 2
  • 增加蚂蚁的记忆

    我有一个关于内存使用的问题 我有 8 GB RAM 我的 ant 设置如下 set ANT OPTS Xmx512m XX MaxPermSize 2G 现在 我已经安装了 16 GB 的 RAM 但是当我运行 ant clean all
  • Android 上 lib 的 Emma 代码覆盖率

    我目前对 Android 应用程序进行了一些单元测试 这些应用程序调用库 jar 文件 我想查看 jar 的代码覆盖率 但是当我运行 ant emma 并查看coverage html 时 它只报告应用程序项目的覆盖率 有没有办法指定我也想
  • 从 google plus 登录重定向到 iOS 应用程序后出现错误

    我在我的 iPhone 应用程序中使用 Google plus api 登录 以前我使用我的 Gmail 帐户在 google plus api 中创建了我的应用程序 那一次效果很好 但是 由于某些原因 我使用 gmail 在我的公司帐户中
  • 对服装照片进行分类有哪些好的功能? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想构建一个服装分类器 拍摄一件衣服的照片并将其分类为 牛仔裤 连衣裙 运动鞋 等 一些例子 这些图像来自零售商网站 因此通常是从相同
  • 将 XML 数据集数据表合并为一个数据表

    我需要使用 C 解析 XML 文档以将数据存入数据库 目前 我正在使用 SSIS 和此 C 代码将文档读入数据集 var xmlString File ReadAllText Variables filepath var stringRea
  • Android 本地化问题:切换区域设置时布局中的所有项目均无法正确更新

    问题是 当我在后台运行一个活动 切换区域设置 然后切换回应用程序时 所有内容都会更新 除了设置了 android id 属性的复选框和单选按钮 如果复选框和单选按钮没有 android id 属性 那么它们会更新正常 其他字段不存在此问题
  • Random.Next 始终返回相同的值[重复]

    这个问题在这里已经有答案了 这真的很奇怪 我不明白为什么会发生这种情况 在 foreach 循环中 我迭代 A 类集合 对于每个类 我调用Count 方法 其中r1 and r2数字是从范围 1 1 生成的 问题是Random Next为每
  • 如何在Linux上停止时间倒流?

    这是我编写的一个小测试 用于验证时间确实只在 Linux 中向前运行 include
  • 将变量从 Jupyter Notebook 传递到 Python 脚本

    我想在 Jupyter 笔记本中定义一个变量 然后将其传递给 python 脚本 例如 在笔记本中 a 1 2 3 4 run example py print foo 在 example py 中 b 5 8 9 10 foo a b 当
  • JavaFX:如何清除画布

    假设我在画布上画了一个矩形 我想清理它以绘制其他图形 多边形 弧 我该怎么做 我尝试过很多方法 但没有一个有效 我认为这可能有效 但我不确定 GraphicsContext gc myCanvas getGraphicsContext2D
  • Scala 解决了 Comparator.thenComparing 中的错误覆盖问题

    我正在尝试翻译以下 Java 代码 import java util Comparator public class ComparatorTestJava public static void test Comparator
  • Visual Studio 2015 Update 2 导致 IDE 挂起

    安装 Visual Studio 2015 Update 2 后 IDE 挂起并且不会在启动屏幕上启动 唯一的修复方法是运行 devenv setup 或者进行修复看起来像是未更新缓存的已知问题 但这是针对预发布更新的 我检查了我的日志 得
  • SwiftUI onAppear 中的异步数据获取

    我有课getDataFromDatabase有功能readData 这就是从 Firebase 读取数据 class getDataFromDatabase ObservableObject var arrayWithQuantity In
  • 删除条形图之间的空间ggplot2

    这是我的代码 ggplot df aes x timepoint y mean fill group geom bar position position dodge 3 colour black stat identity width 0
  • ValueTuple.Create 中的命名参数

    我正在研究 C 中的值元组 首先是一些演示数据 region Data public class Product public string Name get set public int CategoryID get set public
  • 从 Word 中的内容控件提取数据到 Excel

    我有一个 可填写表单 的 Word 文档 即其中包含内容控制对象 例如富文本和日期选择器内容控件 我希望将特定字段的数据提取到 Excel 中 例如 每个表单都有项目标题 开始日期和经理 我想要该表格的 1 行包含这三项数据 最终 每隔几个
  • 如何使用 python 解析 json 对象?

    我正在尝试解析 json 对象并遇到问题 import json record shirt red quanitity 100 blue quantity 10 pants black quantity 50 inventory json
  • 为什么 JavaScript 展开表示法在这里不起作用

    我正在学习 React 有一个我无法解决的简单问题 我创建了一个代码沙盒 https codesandbox io s react dropzone sha256 5ngg7 file src FileUpload js 在图像中 file