javascript - React JSX JSZip - var 范围不正确
问题描述
我正在尝试打开一个 zip 文件,从中获取某些元素,将它们推送到一个数组中,然后使用该数组在 react 中呈现组件列表。我遇到的问题是我在这个 for 循环中对 nameArray 所做的任何事情都无法在它之外被识别。
isUploadPressed(props) {
if(props === true) {
let zip = new JSZip();
JSZip.loadAsync(this.state.zipFile).then(function (zip) {
var listOfFiles;
for (let zipEntry of Array.from(zip)) {
var nameArray = new Array;
nameArray.push(zipEntry.split('/').pop());
}
alert("NameArray: " + nameArray.pop());
nameArray.map((element) => listOfFiles.push(<li><File fileName={element}/></li>))
return listOfFiles;
});
}
}
未处理的拒绝(TypeError):无法读取未定义的属性“pop”
解决方案
您应该声明循环的var nameArray = new Array;
外部,for
以便您可以调用变量。
isUploadPressed(props) {
if(props === true) {
let zip = new JSZip();
JSZip.loadAsync(this.state.zipFile).then(function (zip) {
var listOfFiles;
var nameArray = new Array;
for (let zipEntry of Array.from(zip)) {
nameArray.push(zipEntry.split('/').pop());
}
alert("NameArray: " + nameArray.pop()); // Now you should be able to call nameArray properly
nameArray.map((element) => listOfFiles.push(<li><File fileName={element}/></li>))
return listOfFiles;
});
}
我建议您在这里阅读并了解更多关于范围的信息:JavaScript 中变量的范围是什么?
推荐阅读
- javascript - 使用 ajax 导入时如何访问较低级别的变量并连接它们
- discord.js - 从特定消息中删除特定成员的反应
- java - 在 Java 中发送 CSRF 身份验证 - Pusher
- r - 在 R 中绑定多个 csv 以输出到 ggplot2 中的图形
- authentication - 使用 GraphQL/HotChocolate 验证登录令牌
- django - 将基于外键的常规类的实例化约束为常规类和抽象类
- stack - return2libc - 系统命令找不到 shell
- python - 在 GIF LZW 解压缩算法中读取最大代码表大小后跟清晰代码到底要做什么?
- c++ - 将共享库中定义的结构/数据的单个副本共享给多个共享库中定义的不同对象
- java - Java读取包含字符串和整数的CSV文件,将它们添加到arraylist,然后实例化arraylist